输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入包括3行:
第1行是包含多个单词的字符串 s
第2行是待替换的单词 a (长度<=100)
第3行是a将被替换的单词 b (长度<=100)
s, a, b 最前面和最后面都没有空格。
输出只有 1 行:
将s中所有单词a替换成b之后的字符串。
如果s中单词a没有出现,则将s原样输出。
You want someone to help you You I
I want someone to help you
可以用 gets() 函数来输入带空格的字符串。
一种方法是用strtok去不断地分割字符串,然后用strcat去连接字符串,最后输出结果,这样是可行的。
#include#include #define MAX_LEN 101 int main() { char s[MAX_LEN], a[MAX_LEN], b[MAX_LEN]; char temp[MAX_LEN], *token; char new_s[MAX_LEN * 10] = ""; // 用于保存新的字符串,假设新的字符串长度不超过原始字符串的10倍 fgets(s, MAX_LEN, stdin); // 输入字符串s fgets(a, MAX_LEN, stdin); // 输入待替换的单词a fgets(b, MAX_LEN, stdin); // 输入将替换的单词b // 去掉字符串末尾的换行符 s[strlen(s)-1] = '\0'; a[strlen(a)-1] = '\0'; b[strlen(b)-1] = '\0'; // 在字符串的开头和结尾添加空格 sprintf(temp, " %s ", s); token = strtok(temp, " "); // 分割字符串s while (token != NULL) { if (strcmp(token, a) == 0) { // 如果当前单词是待替换的单词a strcat(new_s, b); // 将单词b添加到新的字符串中 } else { strcat(new_s, token); // 将当前单词添加到新的字符串中 } strcat(new_s, " "); // 添加空格 token = strtok(NULL, " "); // 继续分割字符串s //printf("%s\n",new_s); } new_s[strlen(new_s)-1] = '\0'; // 去掉字符串末尾的空格 printf("%s\n", new_s); // 输出新的字符串 return 0; }
当然啦,也可以一个一个字符地去操作,这就比较精细了。
#include#include using namespace std; char s[105]; char word1[105]; char word2[105]; int main(){ fgets(s,sizeof(s),stdin); scanf("%s%s",word1,word2); int lens=strlen(s); int len1=strlen(word1); //int len2=strlen(word2); int flag=0; for(int i=0;i =lens-1 || s[i+len1]==' ')){ printf("%s",word2); i+=len1-1; } else{ printf("%c",s[i]); } } if(flag=0){ printf("%s",s); } return 0; }