codeup.单词替换

编辑:谯胜平      分类:程序与算法      标签:codeup,字符串处理      发布时间:2019-02-24      浏览次数:1221

题目描述

输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。

输入

多组数据。每组数据输入包括3行,

第1行是包含多个单词的字符串 s,

第2行是待替换的单词a,(长度<=100)

第3行是a将被替换的单词b。(长度<=100)

s, a, b 最前面和最后面都没有空格。

输出

每个测试数据输出只有 1 行,

将s中所有单词a替换成b之后的字符串。

样例输入

I love Tian Qin
I
You

样例输出

You love Tian Qin

一、分析

应该注意到替换的是单词,而不是单词里面的字符,因此有以下两种方法:

  • 通过gets读取三个字符串,遍历第一个字符串,如果在其中匹配到了第二个字符串之后还需要判断出现的位置前后是否满足是空格或者是字符串的开头或末尾

  • 通过scanf读取第一个字符串并存储在一个二维数组中,gets读取第二、第三个字符串,这样的话输入的第一个句子中的单词就被拆分了,然后使用strcmp函数就可以进行比较了,免去了繁琐的位置分析。

二、代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char a[50][20], b[105], c[105];
int main()
{
	int n = 0, m = scanf("%s", a[n++]);
	while (m != EOF && m != 0) { //将待处理的长句子根据空格进行拆分,同时判断是否读到文件末尾
		if (getchar() == '\n') { //判断是否读取到一句话的末尾,即是否有换行
			break;
		}
		else {
			m = scanf("%s", a[n++]);
		}
	}
	gets(b);
	while (gets(c) != NULL) {
		for (int i = 0; i < n; i++) {
			if (strcmp(a[i], b) == 0) { //如果匹配出来的话就打印c字符串
				printf("%s", c);
			}
			else { //没有匹配成功的话就打印a[i]
				printf("%s", a[i]); 
			}
			if (i < n - 1) { //末尾不输出空格
				printf(" ");
			}
		}
		printf("\n");
		n = 0;
		m = scanf("%s", a[n++]);
		while (m != EOF && m != 0) { //将待处理的长句子根据空格进行拆分
			if (getchar() == '\n') { //判断是否读取到末尾
				break;
			}
			else {
				m = scanf("%s", a[n++]);
			}
		}
		gets(b);
	}
	return 0;
}


看不清?换一个