#include<stdio.h> #include<stdlib.h> int strTime(const char *str1, const char *str2, int *time) { int count = 0; char *p1 = str1; char *p2 = str2; //p1是第一次出现的位置 p1 = strstr(p1, p2); //注意这里不要写成*p1!=NULL 因为p1 是null的地址一旦读取*p1 会出错的!!!!不能读取操作系统的数据 //千万不要写成 *p //while (*p1 != ‘\0‘) //while (p1 != NULL) while (p1) { count++; //让指针向后移动str2长度个位置 p1 = p1+strlen(str2); //找到下一次出现的位置 p1 = strstr(p1, p2); } *time = count; return 1; } //这里也可以实现出现次数的查询 /*int strTime(const char *str1, const char *str2, int *time) { char *p = NULL; int count = 0; char *sub = NULL; p = str1; sub = str2; do { p = strstr(p, sub); if (p != NULL) { count++; p = p + strlen(sub); } else { break; } } while (*p != ‘\0‘); *time = count; }*/ int getRes2(const char *str, const char *substr, int *time, char **buf2) { char *buf = (char *)malloc(strlen(str)*sizeof(char)); char *pbuf = buf; //进行字符串的替换 char *p = NULL; char *sub = NULL; p = str; sub = substr; int flag = 4; //只要是不相等的情况下就将字符拷贝到buf中 char *point = "dcba"; while (*p != ‘\0‘) { if (*p != *sub) { *buf = *p; buf++; p++; //printf("%s\n", pbuf); } //想等情况下也就是找到了需要替换的位置 else { for (int i = 0; i < flag; i++) { *buf = *point; buf++; point++; // printf("%s\n", pbuf); } //控制4321循环 flag--; //这里需要将离开了"dcba"首地址的指针重新定位回去 point = "dcba"; if (flag == 0) { flag = 4; } //相等的时候需要让p指针跨越四个字节也就是他下一次进行查找的位置 p += 4; } } //对末尾的加上字符串结束标志防止输出时乱码 *buf = ‘\0‘; //二级指针的典型用法 *buf2 = pbuf; } void main() { char *str1 = "abcd11111abcd2222abcdqqqqqabcd11111abcd2222abcdqqqqqabcd11111abcd2222abcdqqqqq"; char *str2 = "abcd"; int time = 0; //1求字符串"abcd"出现的次数 strTime(str1, str2, &time); printf("出现的次数是%d\n", time); char *buf = NULL; //把字符串替换成(dcba11111dcb2222dqqqqqdd11111dcba.....) //注意特点逆序后,每次字符少一个,四次一循环; getRes2(str1, str2, &time, &buf); printf("原来的字符串 %s\n", str1); printf("替换后的字符串 %s\n", buf); system("pause"); }
通过操作指针,与指针做函数参数'实现字串在主串中出现的次数,然后将出现的部分按照要求进行替换,布布扣,bubuko.com
通过操作指针,与指针做函数参数'实现字串在主串中出现的次数,然后将出现的部分按照要求进行替换
原文地址:http://blog.csdn.net/han1558249222/article/details/25743393