鱼C论坛

 找回密码
 立即注册
查看: 962|回复: 2

[已解决]C语言编程入门题

[复制链接]
发表于 2019-12-8 09:51:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
统计一行文本的单词个数
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
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 18:30:16
本帖最后由 bin554385863 于 2019-12-9 05:15 编辑
  1. #include <stdio.h>
  2. #include <string.h>
  3. int func(const char *str)
  4. {
  5.     int c = 1;
  6.     char cstr[strlen(str)+1];
  7.     strcpy(cstr, str);
  8.     for (char *i = cstr; *(i + 1) != '\0'; i++)
  9.     {
  10.         if (*i != ' ' && *(i+1) == ' ')
  11.         {
  12.             c++;
  13.         }
  14.     }
  15.     if(cstr[strlen(cstr) - 1] == ' ')
  16.     {
  17.         c = c - 1;
  18.     }
  19.     return c;
  20. }
  21. int main(int argc, char const *argv[])
  22. {
  23.     char *cstr = "Let's go to room 209.";
  24.     printf("%d", func(cstr));
  25.     return 0;
  26. }
复制代码

====================================================
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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-8 15:06:08 From FishC Mobile | 显示全部楼层
本帖最后由 倒戈卸甲 于 2019-12-8 15:54 编辑

表示同样想不到高效的方法。我能想到的最直接的办法就是定义一个char数组把用户输入的字符全部接受,然后初始化一个整形变量a并且遍历数组,每当a[n]!=" " &&a[n+1]==" ",变量a的值加1。嗯,遍历到数组结尾时,也还要再加一个分支语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 18:30:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 bin554385863 于 2019-12-9 05:15 编辑
  1. #include <stdio.h>
  2. #include <string.h>
  3. int func(const char *str)
  4. {
  5.     int c = 1;
  6.     char cstr[strlen(str)+1];
  7.     strcpy(cstr, str);
  8.     for (char *i = cstr; *(i + 1) != '\0'; i++)
  9.     {
  10.         if (*i != ' ' && *(i+1) == ' ')
  11.         {
  12.             c++;
  13.         }
  14.     }
  15.     if(cstr[strlen(cstr) - 1] == ' ')
  16.     {
  17.         c = c - 1;
  18.     }
  19.     return c;
  20. }
  21. int main(int argc, char const *argv[])
  22. {
  23.     char *cstr = "Let's go to room 209.";
  24.     printf("%d", func(cstr));
  25.     return 0;
  26. }
复制代码

====================================================
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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 06:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表