C语言编程入门题
统计一行文本的单词个数本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
我的代码:
#include <stdio.h>
#include <string.h>
char jump()
{
char c;
while((c=getchar()==' '))
return c;
}
int main()
{
int c=0,cn=0;
char ch,c1;
ch=getchar();
if(ch==' ')
c1=jump();
if(c1=='\n')
printf("0");
else{
do
{
ch=getchar();
if(ch==' ')
{
c++;
c1=jump();
ch=c1;
}
}while(ch!='\n');
c++;
}
printf("%d\n",c);
return 0;
}
错误点:
测试点0
sample等价,有标点,词间空1格
答案正确
测试点1
多个空格,长、短字符串
答案错误
测试点2
空格结尾
答案错误
测试点3
1个最短单词,前有空格
答案正确
测试点4
全空格
答案错误
思路不是很清晰,题意也不太理解。
本帖最后由 倒戈卸甲 于 2019-12-8 15:54 编辑
表示同样想不到高效的方法。我能想到的最直接的办法就是定义一个char数组把用户输入的字符全部接受,然后初始化一个整形变量a并且遍历数组,每当a!=" " &&a==" ",变量a的值加1。嗯,遍历到数组结尾时,也还要再加一个分支语句 本帖最后由 bin554385863 于 2019-12-9 05:15 编辑
#include <stdio.h>
#include <string.h>
int func(const char *str)
{
int c = 1;
char cstr;
strcpy(cstr, str);
for (char *i = cstr; *(i + 1) != '\0'; i++)
{
if (*i != ' ' && *(i+1) == ' ')
{
c++;
}
}
if(cstr == ' ')
{
c = c - 1;
}
return c;
}
int main(int argc, char const *argv[])
{
char *cstr = "Let's go to room 209.";
printf("%d", func(cstr));
return 0;
}
====================================================
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。
E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-hlrzprod.hg0 --stdout=Microsoft-MIEngine-Out-di1cm5cx.s1c --stderr=Microsoft-MIEngine-Error-s1vkov2d.qbw --pid=Microsoft-MIEngine-Pid-hmybkx1g.hrq --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
5
E:\Users\admin\Documents\VScode\Code>
页:
[1]