c字符和字符串操作

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

//统计字符串中某个字符出现的次数
size_t char_appear_count(char* srcString, char findChar)
{
        size_t countRet = 0;

        char *q = srcString;

        while(*q)
        {
                if(*q == findChar)
                {
                        countRet++;
                }

                q++;
        }

        return countRet;
}

//删除字符串中的某个字符
size_t delete_char(char* srcString, char delChar)
{
        size_t countRet = 0;

        char *p = srcString;

        char *q = srcString;

        while(*q)
        {
                if(*q != delChar)
                {
                        *p++ = *q;
                }
                else
                {
                        countRet++;
                }

                q++;
        }

        *p = '\0';

        return countRet;
}

//替换字符串中的某个字符
size_t replace_char(char* srcString, char srcChar, char destChar)
{
        size_t countRet = 0;

        char *p = srcString;

        char *q = srcString;

        while(*q)
        {
                if(*q != srcChar)
                {
                        *p++ = *q;
                }
                else
                {
                        countRet++;

                        *p++ = destChar;
                }

                q++;
        }

        p = '\0';

        return countRet;
}

//统计字符串中子串出现的次数
size_t substr_appear_count(char* srcString, char* subString)
{
        size_t countRet = 0;

        char *p, *q, *r;

        int subStrLen = strlen(subString);

        while(*srcString)
        {
                p = srcString;

                q = subString;

                while((*p == *q) && (*p) && (*q))
                {
                        p++;

                        q++;
                }

                if(*q == '\0')
                {
                        ++countRet;

                        srcString += subStrLen;
                }
                else
                {
                        srcString++;
                }
        }

        srcString = '\0';

        return countRet;
}

//删除字符串的子串
size_t delete_substr(char* srcString, char* delString)
{
        size_t countRet = 0;

        char *p, *q, *r, *c;

//      size_t delStrLen = strlen(delString);

        int i = 0;

        while(*srcString)
        {
                p = srcString;

                q = delString;

                i = 0;

                while((*p == *q) && (*p) && (*q))
                {
                        i++;

                        p++;

                        q++;
                }
                if(*q == '\0')
                {
                        countRet++;

                        r = p;

                        c = p-i;

                        while(*r)
                        {
                                *c++ = *r;

                                r++;
                        }

                        *c = '\0';

                }
                else
                {
                        srcString++;
                }
        }

        srcString = '\0';

        return countRet;

}

//替换字符串中的子串srcString-->destString 支持全部替换,不等长度替换
size_t replace_substr_to_deststr(char* ctrString, char* srcString, char* destString)
{
        size_t number = 1;

        size_t countRet = 0;

        char *p, *q, *x, *y, *z;

        size_t srcStrLen = strlen(srcString);

        size_t destStrLen = strlen(destString);

        size_t remainStrLen = 0;

        int i;

        while(*ctrString)
        {
                p = ctrString;

                q = srcString;

                while((*p == *q) && (*p != '\0') && (*q != '\0'))
                {
                        p++;

                        q++;

                }


                if(*q == '\0')
                {
                        countRet++;

                        remainStrLen = strlen(p)+1;

                        char buf[remainStrLen];

                        memset(buf, 0, remainStrLen);

                        for(i = 0; i < remainStrLen-1; i++)
                        {
                                buf[i] = *(p+i);
                        }

                        y = p - srcStrLen;

                        z = destString;

                        while(*z != '\0')
                        {
                                *y++ = *z;

                                z++;
                        }

                        x = buf;

                        while(*x != '\0')
                        {
                                *y++ = *x;

                                x++;

                        }

                        number = 0;
#if 0
                        if(destStrLen > srcStrLen)
                        {
                                number = destStrLen-1;
                        }
                        else
                        {
                                number = srcStrLen - destStrLen + 1;
                        }
#endif
                        *y = '\0';

                }

                *ctrString++; //这里可以优化
//              ctrString = ctrString + number;
        }

        *ctrString = '\0';

        return countRet;
}

int main(int argc, char** argv)
{
        char *str = NULL;

        str = (char*)malloc(sizeof(char)*100);
        if(!str)
        {
                exit(1);
        }

        memset(str, 0, 100);

        memcpy(str, "helloAAkkkkkILMVEYMUkk,helloAAkk", strlen("helloAAkkkkkILMVEYMUkk,helloAAkk"));

        printf("原始的字符串:%s\n", str);

        size_t count = char_appear_count(str,'A');

        printf("A出现的次数:%d\n", count);

        count = delete_char(str, 'A');

        printf("删除A之后的字符串:%s,被删除的次数:%d\n", str, count);

        count = substr_appear_count(str, "hello");

        printf("hello出现的次数:%d\n",count);

        count = delete_substr(str, "hello");

        printf("删除hello之后的字符串:%s,被删除的次数:%d\n",str, count);

        count = replace_substr_to_deststr(str, "kk", "Z");

        printf("将kk替换成Z之后的字符串:%s,被替换的次数%d\n", str, count);

#if 1
        count = replace_char(str, 'M', 'O');

        printf("将O替换为M之后的字符串:%s,被替换的次数:%d\n", str, count);

#endif

        count = replace_substr_to_deststr(str, ",", "very much");

        printf("将,替换成very much之后的字符串:%s,被替换的次数:%d\n", str, count);

        free(str);

        return 0;
}

感觉操作这些字符串,可以对指针有更好的理解,平常工作的时候对字符串的操作也是很多,c语言对这个方面的除了一些系统函数之后,处理起来没有像其他语言那么多函数可以选择。也是自己想的一些字符串处理方法,暂时没有发现什么问题,不过有好多改进的地方。望路过的指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值