**poj 单词替换**
描述
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入
输入包括3行,
第1行是包含多个单词的字符串 s;
第2行是待替换的单词a(长度 <= 100);
第3行是a将被替换的单词b(长度 <= 100).
s, a, b 最前面和最后面都没有空格.
输出
输出只有 1 行,将s中所有单词a替换成b之后的字符串。
#include<stdio.h>
#include<stdlib.h>
int main()
{
char str[100];
char s[100][100];
char replace[100];
char target[100];
int curr = 0;
int flag;
gets_s(str);
gets_s(replace);
gets_s(target);
int length = strlen(str);
for (int x = length - 1; x >= 0; x--) { //将后面需要找出的字符串分离出来
for (int y = x; y >= 0; y--) {
if (str[y] == ' ') {
for (int n = y+1; n <= x; n++) {
s[curr][n - y-1] = str[n];
}
s[curr][x - y] = '\0';
curr++;
x = y-1;
}
if (y==0) { //最后一个单词前面没有空格所以要进行特殊处理
for (int n = y ; n <= x+1; n++) {
s[curr][n - y ] = str[n];
}
s[curr][x - y+1] = '\0';
curr++;
x = y - 1;
}
}
}
int x = 0;
int max = 0;
for (int i = 0; i <= curr-1; i++) { //匹配要替换的单词
flag = 1;
x = 0;
if (strlen(replace) != strlen(s[i]))continue; //长度不一致可以直接跳过
for (int n = 0; n <= strlen(replace) - 1; n++) {
if (replace[n] != s[i][n]) {
flag = 0;
}
}
if (flag) {
for ( x= 0; x <= strlen(target) - 1; x++) {
s[i][x] = target[x];
}
s[i][x ] = '\0';
}
}
for (int i = curr - 1; i >= 0; i--) { //进行输出
if (i == 0) {
printf("%s", s[i]);
}
else {
printf("%s ", s[i]);
}
}
}
思路很简单。