题目要求:
编写一个C程序,实现以下功能:
编写一个函数,该函数能判断一个英文句子str(带空格(升级版))中是否含有某个单词w,如“How old are you?”含有“old”。
在main函数中输入一个英文句子,再输入一个单词,如果英文句子中含有那个单词,则输出“YES”,否则输出“NO”
思路:
思路并不是很难。最主要的技术难点就是如果一个句子中有多个目标单词,但只有一个单词是完全正确,其它有残缺或者一个字母不对的情况要怎么处理。
怎么做到检测空格后面的东西呢,scanf加载到‘\0’会自动结束语句,空格和\n回车都算做是‘\0’;
for循环中实现单词的检索,如果检索到正确字符,就将flag标记成true,否则就标记成flase
通过检测flag的标记情况来输出答案。flag为真就代表存在单词。
这里还存在一种情况,单词部分拼错,所以需要定义一个计数变量去检测正确检索到的单词。
直接贴代码,具体解释在代码段中
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdbool.h>
#define MAX 20
/*编写一个C程序,实现以下功能:
编写一个函数,该函数能判断一个英文句子str(不带空格)中是否含有某个单词w,如“Howoldareyou?”含有“old”。
在main函数中输入一个英文句子,再输入一个单词,如果英文句子中含有那个单词,则输出“YES”,否则输出“NO”。
*/void Estimate(char *str,char* word,int n) {char p;int count = 0;p = str;bool flag;flag = false;int i = 0;for (int i = 0; i < n && p != '\0'; i++)//为什么这里需要p != '\0'呢,因为要对空格情况进行检索,如果没有这句话就会导致错误{//for循环中实现单词的检索,如果检索到正确字符,就将flag标记成true,否则就标记成flaseif (str[p] == word[i]) {p++;i++;flag = true;count++;}elseflag = false;}//通过检测flag的标记情况来输出答案。flag为真就代表存在单词。if (!flag && count == n)//这里还存在一种情况,单词部分拼错,所以定义一个计数变量去检测正确检索到的单词。printf("Yes");elseprintf("No");
}
int main() {char str[MAX];//自定义字符串char word[MAX];//目标字符串gets(str);//在c++中gets被列为危险函数,需要使用gets_s().gets(word);//gets可以做到对输入的整一行加载到缓冲区中,也就是无论空格还是什么,只要没有按下回车就会一直加载。Estimate(str, word, strlen(word)-1);
}