【代码】

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 200
void seek(char s[])
{char* p = s;char* start = s;int i, j, len, count = 0, arr[20], maxlen;//count用于表示现在是第几个单词int countforend = 0;const int num = strlen(s);//s的长度for (i = 0; i < num; i++)//遍历s{if ((s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z') && (s[i + 1] == ' ' || s[i + 1] == ',' || s[i + 1] == '.' || s[i + 1] == '?' || s[i + 1] == '!')){count++;char* q = &s[i];len = q - p;s[i + 1] = '\0';//截断单词printf("第%d个单词的长度为%d\n", count, len + 1);puts(p);arr[count] = len + 1;p = &s[i + 2];}}//有arr[]数组,下标代表第n个单词,值代表该单词的长度,count为单词数maxlen = arr[1];//最长单词长度for (j = 1; j < count; j++){if (maxlen <= arr[j])maxlen = arr[j];}for (j = 1; j <= count; j++){if (maxlen == arr[j]){printf("第%d个单词是我们要找的\n", j);if (j == 1){puts(start);}countforend = 0;for (i = 0; i < num; i++)if (s[i] == '\0'){start = &s[i + 1];countforend++;if (countforend == j - 1){puts(start);}}}}
}
int main()
{char s[N];int count;printf("请输入一个不多于20个单词的英文句子:\n");gets(s);puts(s);seek(s);return 0;
}

【解释】
这道题的关键在于分别找出一个英文句子中的每个单词,并计算它们的长度。
笔者的思路较为繁琐,仅给大家一个参考。
首先定义两个指针,一个p一个start都指向英文句子字符串的开始位置。我们用i<strlen(s),去遍历这个字符串的每一个字符,我们找到所有这个字符是正常字母而后一个字符都是空格、标点符号的位置,把这个位置用指针q记录一下。如果我们要输入的是"Harry Potter,the boy who lived.",那么第一次遍历时候,p记录‘H’的位置,q记录’y’的位置,那么第一个单词的长度是q-p+2,然后把第一个空格也就是s[i+1]改成\0,然后把指针p放到s[i+2]位置,继续对下一个单词进行遍历。每一次p都是记录单词的第一个字母位置,q记录单词的最后一个字母位置,除了第一个单词,其它单词的长度是q-p+1。这些关于第几个单词长度是多少的数据我们要放到一个数组里,才好处理出最长的那一个单词。

count计数器记录了我们发现了多少个字符后面是空格或标点的字符,也就是我们找到了多少个单词。

arr[count]=len+2/len+1,让我们把这些结果都放进了一个数组。
之后我们遍历数组,找到maxlen,然后通过第二次遍历,找到arr[j]=maxlen时候的j,也就是我们要找的单词下标。

由于这个时候原本字符串的所有空格和标点位全被我们用\0替换,所以如果j==1,直接puts(s),就能打印出第一个,也就是我们要的最长的单词。

如果j>1,我们要再对字符串遍历,每找到一个\0,把start移到\0后面一位,并计一个数,当这个数刚好等于j-1时候,我们就直接puts(start)。这也很好理解,假如第三个单词最长,我们要打印第三个单词,那么一定要找到前面有两个\0才行。

【C语言数组题】编写程序查找一个英文句子中所有的最长的单词相关推荐

  1. 统计一个英文句子中包含2个a的单词有几个,并将两个a替换为星号,不能用count函数...

    统计一个英文句子中包含2个a的单词有几个,并将两个a替换为星号,不能用count函数 def count(s,x): if (not isinstance(s,str)) or (not isinst ...

  2. python输入一个英文句子、求其中最长的单词的changd_数组练习

    (1)3有以下程序 main() { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2) j+=p[i]; p ...

  3. python输入一个英文句子、求其中最长的单词的changd_corbyliu

    前言 负载均衡技术Load Balance简称LB是构建大型网站必不可少的架构策略之一.它的目的是把用户的请求分发到多台后端的设备上,用以均衡服务器的负载.我们可以把负载均衡器划分为两大类:硬件负载均 ...

  4. python输入一个英文句子、统计单词个数_C语言编程求一个英文句子中的单词数和最长单词的位置、长度及输出这个单词。c++编程 从键盘输入一个英文...

    C语言编程求一个英文句子中的单词数和最长单词的位置.长度及输出这个单词. c++编程 从键盘输入一个英文 www.zhiqu.org     时间: 2020-11-23 我刚做了一关于英文句子里面每 ...

  5. 统计单词的数量 描述 输入一个英文句子,以回车符结束,单词间以空格分隔,标点符号后跟至少一个空格,统计并输出单词的个数(仅统计单词,数字按单词计,不计算标点符号,重复单词出现几次就统计几次)。‪‬‪‬

    统计单词的数量 描述 输入一个英文句子,以回车符结束,单词间以空格分隔,标点符号后跟至少一个空格,统计并输出单词的个数(仅统计单词,数字按单词计,不计算标点符号,重复单词出现几次就统计几次).‪‬‪‬ ...

  6. c语言删除数组重复元素并升序,C语言编程题: 编写函数,从一个已经排序的数组中删去某数后,该数组仍然有序....

    满意答案 nanhrui57q 2014.01.10 采纳率:57%    等级:12 已帮助:8634人 #include #include int compear(void *, void *); ...

  7. Java黑皮书课后题第7章:***7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行、同列、同一对角线)。编写程序显示一个解决方案

    7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行.同列.同一对角线).编写程序显示一个解决方案 题目 题目描述 破题 题目 题目描述 ...

  8. c语言一个整数各位数字个数_C语言编写程序输出10个整数中最小值或最大值

    C语言编写程序输出10个整数中最小值或最大值 这是一个比较基础,同时也包含C语言中诸多特点的程序,仔细体会有很多的格式规则和技巧.其中包括:输入语句,输出语句,数组,分支结构,循环结构.希望广大C语言 ...

  9. python12345输出54321_C语言编写程序 :输入一个正整数,将其逆序输出。例如,输入12345,输出54321. 跪求大神用循环语句...

    点击查看C语言编写程序 :输入一个正整数,将其逆序输出.例如,输入12345,输出54321. 跪求大神用循环语句具体信息 答:#include int main() { int num; scanf ...

最新文章

  1. 软件定义网络 对我们有多重要?
  2. BigMemroy系列文章--11. BigMemory中的SizeOf问题
  3. Python多进程multiprocessing共享数据Value(包括常用的整数、字符串)、列表及字典以及Queue
  4. http协议建立在以下哪一个协议的基础上_HTTP协议梳理
  5. Helm 安装 nginx-ingress 的方法
  6. android SpannableString使用详解
  7. 项目实施之预防注入漏洞
  8. 开关电源入门1-基本原理
  9. Python+OpenCV+PyQt5+多线程实现桌面监控程序
  10. Life:怎样提高睡眠质量?
  11. 浅谈计算机教学的现状分析,浅谈中职计算机专业教学的现状与对策
  12. 易语言 mysql lost connection during query
  13. 网络原理 | 网络设备及相关技术(集线器、交换机、主机、路由器)、冲突域与广播域
  14. 不愧java_JAVA高手请进
  15. 球差透射电镜测试服务的收费标准和样品要求
  16. java计算机毕业设计五金机电市场批发零售管理信息系统源程序+mysql+系统+lw文档+远程调试
  17. 关于PTR的说明【转】
  18. Python数据分析之展示-matplotlib2
  19. 高通烧录软件QPST的介绍和使用方法(简洁实用篇)
  20. 教师编制报名信息计算机等级填错了,教师资格证报名审核通过后发现自己资料填写错误怎么办?...

热门文章

  1. 揭秘CISA——保护关键基础设施免受网络威胁的新联邦机构
  2. fastjson详解
  3. 名言哲理-让心灵找到归属
  4. 团队项目(第二周)—GG队
  5. C# .NET编程基础-throw异常处理-Email格式检测示例
  6. 以高科技传情达意,戴森如何以“洞察力”打造情人节贴心好礼?
  7. python血条游戏代码_手把手Python和pygame游戏开发教程(二)
  8. java使用for循环求一年的某月某日的天数
  9. speedoffice文档里面如何设置页眉页脚高度
  10. zookeeper配置zoo.cfg及客户端