/*
特点:可以将包含标点符号的英文句子中的最长单词筛选出来
演示:
请输入一个英语句子: hello?worldcnajfojej you help, my name is stevelee 最长的单词为:worldcnjfojej
请输入一个英语句子: Stevelee,your shoes look gook! 最长的单词为:Stevelee
*/
#include <stdio.h> #include <string.h>
int main(int argc, const char * argv[]) {
//定义字符串数组,用来存储输入的英语句子 char str[100];
printf("请输入一个英语句子:\n");
//获取输入的英语句子 gets(str);
//定义字符指针数组,用来记录单词的首地址 char *words[100];
//定义变量,记录单词的个数 int count=0;
//标记开关,用来辅助计算单词的个数 int flag = 0;
//对输入的字符串(英语句子)进行遍历 for (int i = 0; str!= '\0' ; i++) {
//遇到空格,将标记开关置零,并将空格改为‘\0’ if ((str == ' ')||(str == ',')||(str == '.')||(str == '?')||(str == '!')) {
flag = 0; str = '\0';
}else if (flag == 0){ //如果遇到flag的值为0,则表示一个单词的开始
//记录空格之后的第一个非空格字符地址 words[count]=&str;
//记录单词数 count++;
//将标记开关置1 flag = 1;
} }
//用打擂台法来选出最长的字符
//假设第一个单词为最长 unsigned long max = strlen(words[0]);
//用来记录最长单词的地址在words[]数组中的下标 int loc = 0;
//printf("count=%d\n",count);
//遍历所有单词,选出长度最长的 for (int i; i < count; i++) {
// printf("words[%d]=%p\n",i,words);
if (max < strlen(words)) {
//printf("%lu\n",max);
max = strlen(words);
//记录最长单词的地址在words[]数组中存储的位置 loc = i;
} }
//printf("最长的单词为:%s\n",words[loc]); printf("最长的单词为:");
char *p;
p=words[loc];
//将选出的最长单词按逐个字符进行打印,目的是将单词后面的标点符号去除 for (int i = 0; *(p+i)!='\0'; i++) {
if (((*(p+i)>'a')&&(*(p+i)<'z'))||((*(p+i)>'A')&&(*(p+i)<'Z'))||(*(p+i)=='-')) {
printf("%c",*(p+i)); } } printf("\n");
return 0; }
|