码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-06-04 20:48:00      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

#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");
}

【通过操作指针,与指针做函数參数&#39;实现字串在主串中出现的次数,然后将出现的部分依照要求进行替换 】

标签:

原文地址:http://www.cnblogs.com/mengfanrong/p/4552731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!