通过操作指针,与指针做函数参数'实现字串在主串中出现的次数,然后将出现的部分按照要求进行替换
2014-05-13 22:24
471 查看
#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"); }
相关文章推荐
- 【通过操作指针,与指针做函数參数'实现字串在主串中出现的次数,然后将出现的部分依照要求进行替换 】
- 字符串操作 要求完成字串在主串中出现的次数,然后按照要求对字符串进行替换
- 输入n个整数,编写函数实现以下操作,要求用指针实现: (1) 对n个数进行排序; (2) 将从指定位置的m个数逆序存放,例如:原序列为2,4,6,8,10,12,14,16,18,20,若要求把
- what's in string? c语言string类函数实现汇总 都是学习使用指针的好例子啊(算是读书摘抄和笔记吧)
- 2017年初编码标题之一:通过关键字查找在文字中出现的次数并按照降序的排列进行展示
- //4. 编写一个函数reverse_string(char * string)(递归实现) //实现:将参数字符串中的字符反向排列。 //要求:不能使用C函数库中的字符串操作函数。
- 【C语言】编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。
- C语言 编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
- 函数多个返回值(返回多个参数/局部变量)通过双重指针来实现
- 制作login.jsp页面,要求实现提供用户登陆的界面, 用户通过该界面输入用户名(控件名userName)和密码(控件名password), 然后点击“登录”按钮实现登陆操作.
- 第13周项目5-字符串操作(2、统计'A'出现的次数)
- 编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
- c++中如何通过函数参数对指针进行赋值
- C和指针之实现可变参数函数编译出现expanded from macro 'va_arg' #define va_arg(ap, type) 解决办法
- 编写一个业务函数,实现按行读取文件。把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。
- web页面中通过js方法回调部分native的功能出现错误 Object [object Object] has no method 'openI***e' at null:1
- // 写一个函数,实现将一个字符串中的'/t'替换成四个'*', '/t'个数不定。如char *p="ht/thdsf/t/ttt/tfds dfsw/t ew/t",替换后p="ht****hdsf********tt****fds dfsw****
- c++中如何通过函数参数对指针进行赋值
- word2013 交叉引用添加参考文献的尾注编号,通过查找 ^# 替换为 [^&] 的方式添加中括号,在进行“更新域”操作后,中括号消失。
- 第十三周项目5字符串操作统计字符'A'出现的次数