自己实现的字符串基本操作

#include "stdafx.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TRUE   1
#define FALSE  0

#define BIG    1
#define EQUAL  0
#define SMALL -1

unsigned int strlenth(char *s)  /* 获取字符串长度 */
{
    unsigned int lenth = 0;

    if (!s)
        return 0;

    while (‘\0‘ != s[lenth])
    {
        lenth++;
    }

    return lenth;
}

void strcopy(char **target, char *source)  /* 字符串拷贝 */
{
    unsigned int i = 0;
    unsigned int length = 0;
    char *pTmp = *target; 

    length = strlenth(source);
    while(‘\0‘ != source[i])
    {
        pTmp[i] = source[i];
        i++;
    }
    pTmp[i] = ‘\0‘;
}

int strcompare(char *s, char *t)  /* 字符串比较,s>t,则返回1;s=t,则返回0;s<t,则返回-1 */
{
    unsigned int uiIndex = 0;
    unsigned int uiLenOfS = strlenth(s);
    unsigned int uiLenOfT = strlenth(t);

    if (0 != uiLenOfS && 0 == uiLenOfT)        //如果s字符数不为0,而t字符数为0,则返回1
    {
        return BIG;
    }
    else if (0 == uiLenOfS && 0 != uiLenOfT)//如果s字符数为0,而t字符数不为0,则返回-1
    {
        return SMALL;
    }
    else if (0 == uiLenOfS && 0 == uiLenOfT)//如果s和t字符数都为0,则返回0。字符数为0的情况有空串或字符串指针为空
    {
        return EQUAL;
    }
    else                                    //s和t的字符数都不为0
    {
        /* 同时遍历两个字符串,只要有一个扫描完,就退出 */
        while (‘\0‘ != s[uiIndex] && ‘\0‘ != t[uiIndex])
        {
            if (s[uiIndex] > t[uiIndex])
            {
                return BIG;
            }
            else if (s[uiIndex] < t[uiIndex])
            {
                return SMALL;
            }
            else
            {
                ;
            }
            uiIndex++;
        }

        /* 扫描结束后,哪个字符串没扫描完,则说明这个字符串大;如果都扫描完了,说明相等 */
        if (‘\0‘ != s[uiIndex] && ‘\0‘ == t[uiIndex] )
        {
            return BIG;
        }
        else if (‘\0‘ == s[uiIndex] && ‘\0‘ != t[uiIndex] )
        {

            return SMALL;
        }
        else
        {
            return EQUAL;
        }
    }
}

void strcombine(char **s, char *t)  /* 字符串连接,将字符串t接到s后面,x为连接后的新串 */
{
    unsigned int uiLen = 0;
    char *pTmp = *s;
    if (NULL == s || NULL == t)
    {
        return;
    }

    uiLen = strlenth(pTmp) + strlenth(t);

    memcpy(pTmp + strlenth(pTmp), t, strlenth(t));
}

void strcatch(char *s, unsigned int index, unsigned int lenth, char **t)  /* 字符串截取,从第index个字符开始,截取lenth长度的字符串,并输出到字符串t */
{
    char *pTmp = *t;
    char *pSrc = s;

    if (NULL == s)
    {
        return;
    }
    if (index < 0 || lenth <= 0 || index + lenth >= strlenth(s))
    {
        return;
    }

    while (index--)
    {
        pSrc++;
    }
    memcpy(pTmp, pSrc, lenth);
}

bool strsubstr(char *s, char *sub)  /* 字符串子串查找,如果子串sub在s中存在,则返回1,否则返回0 */
{
    unsigned int uiIndexOfS = 0;
    unsigned int uiIndexOfSub = 0;
    unsigned int uiLenOfS = strlenth(s);
    unsigned int uiLenOfSub = strlenth(sub);

    if (NULL == s || NULL == sub)
    {
        return FALSE;
    }
    if (uiLenOfS < uiLenOfSub)        //如果子串长度大于原串,则返回0
    {
        return FALSE;
    }

    while (‘\0‘ != s[uiIndexOfS])
    {
        if (s[uiIndexOfS] == sub[0])
        {
            while (‘\0‘ != sub[uiIndexOfSub])
            {
                if (s[uiIndexOfS] != sub[uiIndexOfSub])
                {
                    return FALSE;
                }
                uiIndexOfS++;
                uiIndexOfSub++;
            }
            if (‘\0‘ == sub[uiIndexOfSub])
            {
                return TRUE;
            }
        }
        uiIndexOfS++;
    }

    if (‘\0‘ != sub[uiIndexOfSub])
    {
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}

int main()
{
    char str1[] = "Hello";
    char str2[] = " World";
    char str3[] = "Hello";
    char *str4 = (char*)malloc(100);
    if (!str4)
        return 0;
    memset(str4, 0, 100);

    char *str5 = (char*)malloc(100);
    if (!str5)
        return 0;
    memset(str5, 0, 100);

    strcopy(&str5, str1);
    strcombine(&str5, str2);
    strcatch(str5, 0, 5, &str4);
    printf("str5 = %s\n", str5);
    printf("The length of str1 is %u\n", strlenth(str1));
    printf("strcompare(str1, str2) = %d\n", strcompare(str1, str2));
    printf("strcompare(str1, str3) = %d\n", strcompare(str1, str3));
    printf("strsubstr(str5, str1) = %d\n", strsubstr(str5, str1));
    printf("Call strcatch(str5, 0, 5, &str4), str4 = %s\n", str4);
}

自己实现的字符串基本操作

时间: 2024-11-11 22:13:03

自己实现的字符串基本操作的相关文章

JAVASE02-Unit01: API文档 、 字符串基本操作

API文档 . 字符串基本操作 文档注释 package day01; /** * 文档注释只能定义在三个地方: * 类,方法,常量 * * 文档注释是功能注释,用来说明功能作用 * 在类上使用的目的是说明当前类的设计目的 * * @author adminitartor * @version 1.0 * @see java.lang.String * @since JDK1.0 * */ public class DocApiDemo { /** * sayHello方法中的问候语 */ pu

【Py】字符串基本操作

字符串基本操作: python中的字符串是一个高级工具,是不可变序列 python中没有char类型,只有单字符字符串 python中是用双引号或单引号括起来的内容,但单双引号不能混用,如过在字符串中本身又包含字符串,可以使用转义字符 Let's go!的两种写法: 1 >>> 'Let\'s go!' 2 "Let's go!" 1 >>> "Let's go!" 2 "Let's go!"

舌尖上的javascript数组和字符串基本操作

Javascript数组基本操作 Javascript中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数,然而这些数字索引在内部被转换为字符串类型,这是因为javascript对象中的属性名必须是字符串. 一:如何创建数组? 创建数组有2中方式,第一种是对象字面量如下: var  arrs = [];  // 定义了一个空数组. 还有一种方式是:调用Array的构造函数创建数组 var arrs = new Array(); 二:数组的基本操作如下: 1. 把字符串转换

Shell编程之数组、字符串基本操作

数组 概念 一对括号表示是数组,数组元素用"空格"符号分割开,格式为:array=(value0 value1 value2 value3 ...),此时数组的下标默认是从0开始的 基本操作 1.arr=(1 2 3 4 5) 2.arr=( 1 2 3 ) 3.echo ${#arr[@]},${#arr[*]}   #获取数组长度,用${#数组名[@或*]} 可以得到数组长度 4.echo ${arr[0]},${arr[1]},${arr[2]}  #获取数组元素的值 5.ech

【JavaSE】day01_ API文档 、 字符串基本操作

--20150820 1.String及其常用API 1)java中String对象为不可变对象,一旦在内存中创建,内容不能发生变化,若要对字符串内容改变,那么就会创建新对象.这样做的目的是可以最大程度的重用相同内容的字符串以减小系统资源的开销. 2)String常量池 当我们通过字面量,常量来初始化一个字符串时,JVM首先会从字符串的常量池(一个JVM内部维护的内存区域,用来保存已经创建过的字符串对象)中查询用来保存该字符串的对象是否存在,若存在则直接引用,若不存在则创建该字符串对象并存入常量

字符串基本操作以及内存函数

/* ============================================================================ Name : TestString.c Author : lf Version : Copyright : Your copyright notice Description : C语言字符串相关操作以及内存函数 1 在Java中有String数据类型,但是在C语言中没有 2 在C语言中一般用字符数组来表示字符串,因为在C中没有Strin

JAVASE01---Unit01: API文档 、 字符串基本操作

用户看见的和你没有关系.客户端主要用来展现的,服务端(后台).程序员是内在美,和外在美没有关系.UI赋予你内在美,程序赋予你外在美和灵魂.java学完之后做的是服务端开发,以及Android的工作.服务端开发分为两个分支,最主流做的是商业级的服务器(公司及企业的管理系统.OA系统,例如银行操作系统后台都是java的工作),其次就是游戏,端游等等.大部分工作做传统的javaEE工作,商业级的东西. C语言是出现比较早的高级语言,它现在基本上做的都是底层的操作.比如,驱动的开发,内核的开发.和操作系

字符串基本操作

1.已知'星期一星期二星期三星期四星期五星期六星期日 ',输入数字(1-7),输出相应的'星期几 s='星期一星期二星期三星期四星期五星期六星期日' t=int(input("输入数字1-7\n")) print(s[(t-1)*3:t*3]) 2.输入学号,识别年级.系别.专业.序号 t=input("请输入学号:") print("年级:",t[0:4]) print("系别编号:",t[4:6]) print("

9.15字符串基本操作

已知'星期一星期二星期三星期四星期五星期六星期日 ',输入数字(1-7),输出相应的'星期几 s='星期一星期二星期三星期四星期五星期六星期日'd=int(input('1-7:'))print(s[3*(d-1):3*d]) 输入学号,识别年级.专业.班级.序号 id=input('请输入学号:')print('年级:',id[0:4])print('专业:',id[4:6])print('班级:',id[6:8])print('序号:',id[-4:]) 输入身份证号,识别地区.年龄.性别