#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语言对这个方面的除了一些系统函数之后,处理起来没有像其他语言那么多函数可以选择。也是自己想的一些字符串处理方法,暂时没有发现什么问题,不过有好多改进的地方。望路过的指教。