题目要求:
编写一个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,否则就标记成flase
if (str[p] == word[i]) {
p++;
i++;
flag = true;
count++;
}
else
flag = false;
}
//通过检测flag的标记情况来输出答案。flag为真就代表存在单词。
if (!flag && count == n)//这里还存在一种情况,单词部分拼错,所以定义一个计数变量去检测正确检索到的单词。
printf("Yes");
else
printf("No");
}
int main() {
char str[MAX];//自定义字符串
char word[MAX];//目标字符串
gets(str);//在c++中gets被列为危险函数,需要使用gets_s().
gets(word);//gets可以做到对输入的整一行加载到缓冲区中,也就是无论空格还是什么,只要没有按下回车就会一直加载。
Estimate(str, word, strlen(word)-1);
}