简单的C语言字符串给oj作业通过的代码采纳

Problem 1 编写函数FindReplaceStr,其功能是从左到右地、不相交地、不递归地(参考示例)将字符串str中的所有子串find_str都替换成字符串replace_str(其长度与find_str的长度不一定相等),返回值为替换的次数,其原型为: int FindReplaceStr(char str[], const char find_str[], const char replace_str[]); 并在主函数中调用它处理输入。 输入、替换结果中的每个字符串的长度都不会超过99。 其实这就是各种文本编辑器中的“全部替换”功能。 请小心处理空白符。 字符串库函数可用列表: strlen() 注意:禁用STL。 input: 三个字符串,分别以换行符结束(换行符不计入字符串)。 output: 第一行:替换后的字符串; 第二行:替换次数。 input: ababa aba c output: cba 1 input: ababa aba ba output: baba 1

代码如下,如有帮助,请采纳一下,谢谢。

#include <stdio.h>
#include <string>
using namespace std;

 int FindReplaceStr(char str[], const char find_str[], const char replace_str[])
 {
	 string s = str;
	 int lenFind = strlen(find_str);  //需要被替换的字符串的长度
	 int index = s.find(find_str);
	 int tms = 0;
	 while ( index >= 0 && index < s.length()-3)
	 {
		 tms++;
		 string s1 = s.substr(0,index);
		 string s2 = s.substr(index + lenFind,s.length() - index  - lenFind );
		 s = s1 + replace_str + s2;
		 index = s.find(find_str);
	 }
	 printf("替换后的字符串:%s\n",s.c_str());
	 printf("替换次数:%d\n",tms);
	 return tms;
 }

 int main()
 {
	 char buf[100] = {0};
	 char findstr[99] = {0};
	 char rpstr[99] = {0};
	 printf("请输入原始字符串:");
	 gets(buf);
	 printf("请输入查找字符串:");
	 gets(findstr);
	 printf("请输入替换字符串:");
	 gets(rpstr);

	 int tms = FindReplaceStr(buf,findstr,rpstr);

	 
	 
	 getchar();
	 getchar();
	 return 0;

 }

 

好像不让用STL库,重新写了一下代码,发给你,如下:

#include <stdio.h>
#include <string>

//查找位置
int MyFind(const char src[],const char fstr[])
{
	int lensrc = strlen(src);
	int lenfstr = strlen(fstr);
	int index = 0; 
	while((index + lenfstr)< lensrc)
	{
		bool b = true;
		for (int i = 0; i < lenfstr; i++)
		{
			if (src[index+i] != fstr[i])
			{
				b = false;
				break;
			}
		}
		if (b)
		{
			return index;
		}else
			index++;
	}

	return -1;

}
//截取子串
char* SubString(const char src[],int startindex,int size)
{
	char* p = new char[size+1];
	p[size] = 0;
	memcpy(p,src+startindex,size);
	return p;
}

int FindReplaceStr(char str[], const char find_str[], const char replace_str[])
{
	int lenFind = strlen(find_str);  //需要被替换的字符串的长度
	int index = MyFind(str,find_str);//s.find(find_str);
	int tms = 0;
	char* ll = new char[strlen(str)+1];
	memset(ll,0,strlen(str)+1);
	memcpy(ll,str,strlen(str));
	while ( index >= 0 && index < strlen(ll)-3)
	{
		tms++;
		char* p1 = SubString(ll,0,index);//s.substr(0,index);
		char* p2 = SubString(ll,index + lenFind,strlen(ll) - index  - lenFind);
		//string s2 = s.substr(index + lenFind,s.length() - index  - lenFind );
		delete[] ll;
		ll = new char[strlen(p1) + strlen(p2) + strlen(replace_str)+1];
		memset(ll,0,strlen(p1) + strlen(p2) + strlen(replace_str)+1);
		memcpy(ll,p1,strlen(p1));
		memcpy(ll+strlen(p1),replace_str,strlen(replace_str));
		memcpy(ll+strlen(p1)+strlen(replace_str),p2,strlen(p2));
		delete[] p1;
		delete[] p2;
		//s = s1 + replace_str + s2;
		index = MyFind(ll,find_str);//s.find(find_str);
	}
	printf("替换后的字符串:%s\n",ll);
	printf("替换次数:%d\n",tms);
	delete[] ll;
	ll = 0;
	return tms;
}
int main()
{
	char buf[100] = {0};
	char findstr[99] = {0};
	char rpstr[99] = {0};
	printf("请输入原始字符串:");
	gets(buf);
	printf("请输入查找字符串:");
	gets(findstr);
	printf("请输入替换字符串:");
	gets(rpstr);
	int tms = FindReplaceStr(buf,findstr,rpstr);

	
	getchar();
	getchar();
	return 0;
}