CC++之代替字符串⼦串
跟谁学公司⼆⾯时,直接上来就出了⼀道题,就是代替⽤⼀个字符串代替⼀个字符串中的某个⼦串(存在多个),⽽且只能⽤到strlen()、strcpy()、strcmp()函数。当时是蒙圈的,写了半个⼩时也没写出来。。下⾯记录⼀下吧:
#include<stdlib.h>
#include<iostream>
#include<algorithm>
int checkStr(char*s1,char*s2)//匹配字符串相不相等
{
for(int i =0; i <strlen(s2); i++)
{
if(s1[i]!= s2[i])return0;
}
return1;
}
void reStr(char*s1,char*s2,char*s3)//替换字符串
{
int s1len =strlen(s1),
s2len =strlen(s2),
s3len =strlen(s3);
int n1 = s1len - s2len;
int n2 = s2len - s3len;
if(n2 >0)
{
//后⾯的字符串全部向前移n2个位置
for(int i = s2len; i < s1len; i++)
{
s1[i - n2]= s1[i];
}
s1[s1len - n2]='\0';
}
else if(n2 <0)//后⾯的字符串全部向后移n2个位置
{
for(int i = s1len; i >= s2len; i--)
{
//n2为负数
s1[i - n2]= s1[i];
}
s1[s1len - n2 +1]='\0';
}
//然后在把要替换的字符串插进去
for(int i =0; i < s3len; i++)
{
s1[i]= s3[i];
}
}
int replaceStr(char*s1,char*s2,char*s3)//替换字符串函数返回n表⽰替换了多少次
{
int n =0;
for(int i =0; i <strlen(s1); i++)
{
if(s1[i]== s2[0]&&checkStr(&s1[i], s2)==1)
{
reStr(&s1[i], s2, s3);
n++;
}
}
return n;
}
int main()
{
// test
char s1[30]="qwertyuerp";
char s2[]="er";
char s3[]="111111";
printf("%d\n%s\n",replaceStr(s1, s2, s3), s1);
system("pause");
return0;
}
另外如果使⽤c++的string模板类操作如下:
#include<iostream>
#include<string>
using namespace std;
bool checkStr(string s1, string s2,int n)//匹配字符串相不相等{
for(int i = n; i < s2.size(); i++)
{
if(s1[i]!= s2[i])return false;
}
return true;
}
int main()
{
string s ="asfhnafgrytahrg";
字符串replace函数string s1 ="bbbb";
string s2 ="a";
for(int i =0; i < s.size(); i++)
{
if(s[i]== s2[0]&&checkStr(s, s2 ,i))
{
s = s.replace(s.begin()+i, s.begin()+i + s2.size(), s1);
}
}
//place(n, n+s2.size(), s1);
cout << s << endl;
system("pause");
return0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。