通过操作指针,与指针做函数参数'实现字串在主串中出现的次数,然后将出现的部分按照要求进行替换

来源:互联网 发布:淘宝网店怎么设置客服 编辑:程序博客网 时间:2024/05/16 11:41
#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");}

1 0