删除指定字符串及删除指定全部字符串

来源:互联网 发布:hadoop spark hive知乎 编辑:程序博客网 时间:2024/06/14 00:46

删除指定字符串:

函数有删除一个字符串的,有删除指定字符串的,注意不同函数的思路。

#include<stdio.h>#include<stdlib.h>#include<string.h>/* 方法一:删除全部指定字符串 */void delString(char *str, char *finstr){char *pstr = strstr(str, finstr);if (NULL == pstr){printf("没有找到要删除的字符串!");return;}/* 每次从删除后的字符串再查询是否有相应的字符串,如果找到则继续删除 *//* 这个FOR 效率低,每次都是从开头查询。 *///for (pstr; pstr != NULL; pstr = strstr(str, finstr))/* 每次从删除点开始向后查询,这样就可以提高效率,因为前面删除的就不需要再进行查询了 *//* 只是我们给的这个目标字符串是故意这样设置的,因为删除后又有同样的字符串被组合到了一起 */for (pstr; pstr != NULL; pstr = strstr(pstr, finstr)){//保保找到的字符串首地址char *temp = pstr;char *ptemp = pstr;ptemp += strlen(finstr);while (*temp != '\0'){*temp = *ptemp;temp++;ptemp++;}printf("%s\n", str);}}/* 方法二:全部删除指定字符串 */void delAllString(char *str, char *chx){int i = 0;int j = 0;while ((str[i] = str[j]) != '\0'){int flag = 1;//假定找到//查找,每个字符对比,有一个不等就不等,预防母串提前结束。for (int k = 0; k < strlen(chx); k++){if (str[j + k] != chx[k] || str[j + k] != '\0'){flag = 0;break;}}if (flag == 0){i++;j++;}else{j += strlen(chx);//找到就跳过。}}}/* 方法一:删除一个字符串 */void delStr(char *str, char *chx){char *p = strstr(str, chx);if (NULL == p){return;}else{int length = strlen(chx);//移动的差距/* strlen(p) - strlen(chx):需要移动的距离 循环是从查询到的要删除的字符串的开头地址开始循环*/for (int i = 0; i <= strlen(p) - strlen(chx); i++){p[i] = p[i + length];}}}void main(){char str[1024] = "ab123aabbeababcab58ab";char *p = "ab";printf("原字符串的值:%s\n", str);//delString(str, p);delStr(str, p);printf("删除后字符串:");printf("%s\n", str);system("pause");}


0 0
原创粉丝点击