题目描述
-
编写函数
void reOnce(char src[], char obj[], char sub[])
,函数功能是用sub
字符串替换长串src
内第一次出现的obj
子串。 -
编写函数
void repAll(char src[], char obj[], char sub[])
,函数功能是用sub
字符串替换长串src
内出现所有的obj
子串。
void repOnce(char src[], char obj[], char sub[]);
void repAll(char src[], char obj[], char sub[]);
原始代码:
#include <iostream>
#include <cstring>
using namespace std;
void repOnce(char src[], char obj[], char sub[]);
void repAll(char src[], char obj[], char sub[]);
int main(){
char c[100],obj[100],sub[100];
cout << "依次输入src,obj,sub:"<<endl;
cin.getline(c,100);
cin.getline(obj,100);
cin.getline(sub,100);
repOnce(c, obj, sub);
cout << c << endl;
cout << "依次输入src,obj,sub:"<<endl;
cin.getline(c,100);
cin.getline(obj,100);
cin.getline(sub,100);
repAll(c, obj, sub);
cout << c << endl;
return 0;
}
void repOnce(char src[], char obj[], char sub[]){
/*--------Your Code Here--------*/
}
void repAll(char src[], char obj[], char sub[]){
/*--------Your Code Here--------*/
}
题目提示
cin.getline
允许读取包含空格的字符串。它将持续读取,直到它读取至最大指定的字符数,或直到按下了回车键。
可使用库函数strcpy
strcmp
strncpy
strncmp
strstr
等。
strcpy
函数:strcpy(char ds[], char ss[])
,作用是把ss
字符串复制给ds
指向的内存区域。
strncmp
函数:int strncmp (char ds[], char ss[], int len)
,作用是比较ds串和ss串中的前面len
个字符,如果相同返回0,如果ds
<ss
,返回-1,否则返回1。
strncpy
函数:strncpy(char ds[], char ss[], int len)
,作用是把ss
中的前len
个字符复制到ds
指向的内存区域。
strstr
函数:char *strstr(const char *s, const char *needle)
在字符串s
中查找第一次出现字符串needle
的位置,不包含终止符 ‘\0’。
该函数返回在s
中第一次出现needle
字符串的位置,如果未找到则返回 null。
参考代码
1. 一次替换
void repOnce(char src[], char obj[], char sub[]){
char *p = strstr(src, obj);
char tail[100];
strcpy(tail,p+strlen(obj));
strcpy(p,sub);
strcpy(p+strlen(sub), tail);
}
2. 全部替换
解法一
void repAll(char src[], char obj[], char sub[]){
while(strstr(src,obj))
repOnce(src,obj,sub);
}
解法二
void repAll(char src[], char obj[], char sub[]){
//while(strstr(src,obj)) repOnce(src,obj,sub);
char *p = src;
char target[100], *q = target;
while(*p!='\0'){
if(strncmp(p, obj, strlen(obj))==0){
strcpy(q,sub);
p += strlen(obj);
q += strlen(sub);
}
else
*q++ = *p++;
}
*q = '\0';
strcpy(src,target);
}
完整代码
#include <iostream>
#include <cstring>
using namespace std;
void repOnce(char src[], char obj[], char sub[]);
void repAll(char src[], char obj[], char sub[]);
int main(){
char c[100],obj[100],sub[100];
cout << "依次输入src,obj,sub:"<<endl;
cin.getline(c,100);
cin.getline(obj,100);
cin.getline(sub,100);
repOnce(c, obj, sub);
cout << c << endl;
cout << "依次输入src,obj,sub:"<<endl;
cin.getline(c,100);
cin.getline(obj,100);
cin.getline(sub,100);
repAll(c, obj, sub);
cout << c << endl;
return 0;
}
void repOnce(char src[], char obj[], char sub[]){
char *p = strstr(src, obj);
char tail[100];
strcpy(tail,p+strlen(obj));
strcpy(p,sub);
strcpy(p+strlen(sub), tail);
}
void repAll(char src[], char obj[], char sub[]){
while(strstr(src,obj)) repOnce(src,obj,sub);
}