PTA中关于统计一行文本的单词个数

欠债的脱水橘猫 2019-11-26 07:27:23
我的脑子又又又被驴踢了,大佬救命
先放题目
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:

输入给出一行字符。
输出格式:

在一行中输出单词个数。
输入样例:

Let's go to room 209.

输出样例:

5

再放问题:问题一:我自己写了一小段代码不知道错在哪,那个未知长度字符串的表示是我百度出来的
问题二:在我复制粘贴别人代码的注释里,就是j=1,那里,一共有两个小问哦

先放我自己写的代码,虽然我知道有些地方很奇怪,求指导
#include<stdio.h>
#include<string.h>
int main()
{
int count=0,blank;
string i;
blank=' ';
scanf("ls%c%",i,blank);
if(i)count++;
printf("%d",count);
return 0;
}


再放别人写的代码,一共有两个小问哦
#include<stdio.h>
#include<string.h>
int main()
{
char a[1000];/*定义一个数组*///大佬看这:万一我的字符串长度超过一千了怎么办?
gets(a);/*得到字符串附给a*/
int m, i, j;
m = strlen(a);/*从内存的某个位置开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值*/
if (a[0] == ' ')/*若果前面有空格则不计前面的空格*/
j = 0;
else
j = 1;//大佬看这:这个应该是指,第一个单词吧,后面那个循环应该是统计除第一个单词之后的单词吧
for (i = 0; i<m - 1; i++)//继续上面问题:那么最后一个单词也满足前面空格和后面空格的形式吗,字符串的结尾不是\0吗,怎么统计最后一个单词
{//按照这个循环的意思应该是通过空格统计单词吧
if (a[i] == ' ' /**/&& a[i + 1] != ' '/*保证空格为两个单词之间的空格*/)
j++;
}
printf("%d\n", j);/*输出*/
return 0;
}
...全文
1175 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
铖邑 2019-11-26
  • 打赏
  • 举报
回复
嗯,快去好好学习啊,不然拿鞭子来抽
  • 打赏
  • 举报
回复
引用 10 楼 SuperDay的回复:
就是一个循环而已嘛,好好写就是了
好,待会我就去学数组,多谢大佬提点
铖邑 2019-11-26
  • 打赏
  • 举报
回复
就是一个循环而已嘛,好好写就是了
  • 打赏
  • 举报
回复
引用 8 楼 乔碧萝大魔王的回复:
[quote=引用 7 楼 SuperDay的回复:]你看看你,程序不好好写,尽想着偷懒,说明还是没长进
我……脑子比较小,想不出只能分析别人的了,没想偷懒,真的……[/quote] 表情包发错了,我以为是叹气
  • 打赏
  • 举报
回复
引用 7 楼 SuperDay的回复:
你看看你,程序不好好写,尽想着偷懒,说明还是没长进
我……脑子比较小,想不出只能分析别人的了,没想偷懒,真的……
铖邑 2019-11-26
  • 打赏
  • 举报
回复
你看看你,程序不好好写,尽想着偷懒,说明还是没长进
  • 打赏
  • 举报
回复
引用 2 楼 寻开心的回复:
int main()
{
char a[1000]; //万一我的字符串长度超过一千了,那就是溢出了。 可以用fgets函数限定读入的字数
gets(a);/*怕a溢出,这fgets(a, 999, “stdin”)来替代gets函数 */
int m, i, j;
m = strlen(a);
if (a[0] == ' ') /* 算法是从空格后的第一个字符或者整个字符串的第一个字符开始计算单词数量*/
j = 0;
else
j = 1;// 遇到单词的第一个字母的时候开始计数;不是等到单词结束遇到空格计数;这样避免到整个字符串结束后附加的判断
for (i = 0; i<m - 1; i++)//正因为遇到单词的第一个字符开始计数,所以不用管字符串结尾到没到
{//按照这个循环的意思应该是通过空格统计单词吧
if (a[i] == ' ' && a[i + 1] != ' '/*说明遇到下一个单词的第一个字母啦,所以计数器加1*/)
j++;
}
printf("%d\n", j);
return 0;
}
好完美的诠释,向大佬低头,大佬祝你开心^_^
  • 打赏
  • 举报
回复
引用 1 楼 SuperDay的回复:
又是你!1你写的什么程序啊?乱七八糟。2你说的没错
不用麻烦大佬了,有人回答了,哈哈哈哈,避免了您的头痛
寻开心 2019-11-26
  • 打赏
  • 举报
回复
第一段代码,老实说, 没看出来哪儿对了, 所以也不知道哪儿错了
  • 打赏
  • 举报
回复
引用 1 楼 SuperDay的回复:
又是你!1你写的什么程序啊?乱七八糟。2你说的没错
求指导,大佬我错了,我也不想的( °◅° )我知道有点奇怪,但是我感觉那样比较简洁,然后别人的代码那里大佬你还没回答我那个万一我的字符串超过一千了怎么办,以及为什么他可以统计最后一个单词的问题呢,详情注释右拉哦,多谢大佬
寻开心 2019-11-26
  • 打赏
  • 举报
回复
int main()
{
char a[1000]; //万一我的字符串长度超过一千了,那就是溢出了。 可以用fgets函数限定读入的字数
gets(a);/*怕a溢出,这fgets(a, 999, “stdin”)来替代gets函数 */
int m, i, j;
m = strlen(a);
if (a[0] == ' ') /* 算法是从空格后的第一个字符或者整个字符串的第一个字符开始计算单词数量*/
j = 0;
else
j = 1;// 遇到单词的第一个字母的时候开始计数;不是等到单词结束遇到空格计数;这样避免到整个字符串结束后附加的判断
for (i = 0; i<m - 1; i++)//正因为遇到单词的第一个字符开始计数,所以不用管字符串结尾到没到
{//按照这个循环的意思应该是通过空格统计单词吧
if (a[i] == ' ' && a[i + 1] != ' '/*说明遇到下一个单词的第一个字母啦,所以计数器加1*/)
j++;
}
printf("%d\n", j);
return 0;
}
铖邑 2019-11-26
  • 打赏
  • 举报
回复
又是你!1你写的什么程序啊?乱七八糟。2你说的没错

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧