题目:
编写程序,根据给出的一个结束于'.'的字符字串,找出其中最长的含有字母'a'的子串。输入仅有一行,根据给出的一个结束于'.'的字符字串,找出其中最长的含有字母'a'的子串。
显示找出的最长的含有字母'a'的子串。如果有多个这样的子串,只显示其中的第一个;若没有含字母'a'的子串,则显示'NO'。
分析:
只对输入的字符串进行检测是否有‘a’,判断每个单词是否为最长并不好操作。所以选择用另一个二位数组来存储每一个单词,并再用第三个数组max[10]数组来存储符合要求的字符数组。
如此分析,需进行的主要操作如下:
1.字符串按单词分割。
2.检测每个单词数组是否含有字母'a'。
3.找出符合2的最长单词数组。
4.能否找到满足条件的单词数组。
代码:
#include<stdio.h>
#include<string.h>
#define Max 100
int contains_a(char *word) {
while (*word) {
if (*word == 'a') {
return 1; // 如果包含 'a' 返回 1
}
word++;
}
return 0; // 否则返回 0
}
int main(){
char s[Max];
gets(s);
char max[10];//保存单词
char danci[Max][10];//,每行存储一个含有的单词
int i=0,j=0,k=0;
if (s[strlen(s) - 1] == '.') {
s[strlen(s) - 1] = '\0';
}
while(s[i]!='\0'){
if(s[i]==' ') {
danci[j][k]='\0';
j++;
k=0;
}
else {
danci[j][k]=s[i];
k++;
}
i++;
}
danci[j][k]='\0';
int max_length = 0;
int found = 0;
for (int m = 0; m <= j; m++) {
if (contains_a(danci[m])) { // 如果当前单词包含 'a'
if (strlen(danci[m]) > max_length) { // 如果当前单词比最大长度的还长
strcpy(max, danci[m]); // 更新最大单词
max_length = strlen(danci[m]); // 更新最大长度
found = 1;
}
}
}
// 输出结果
if (found) {
printf("%s\n", max);
} else {
printf("NO\n");
}
getchar();
getchar();
return 0;
}
测试:
样例输入
Her name is Lilan and she is a happy student.
样例输出
Lilan