鱼C论坛

 找回密码
 立即注册
查看: 3119|回复: 7

数组和字符串

[复制链接]
发表于 2019-10-27 09:18:58 | 显示全部楼层 |阅读模式

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

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

x
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5                        //这是题目。

请问 怎么解决多空格问题。求助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-27 10:05:36 | 显示全部楼层
判断字符 遇到空格加1 最后'\0'结束再加1. 连续空格做个标记。不就搞定了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 10:10:10 | 显示全部楼层
str1 = ‘字符串’
num = 1   #统计单词数量
for i in str1:
      if i == ' ':
            if str1[i-1] != ' ':
                  num += 1

这样可以吗,我是新手,可能用的方法比较low
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 10:23:31 | 显示全部楼层
wqz666 发表于 2019-10-27 10:10
str1 = ‘字符串’
num = 1   #统计单词数量
for i in str1:

你得用c解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 11:49:01 | 显示全部楼层
本帖最后由 bin554385863 于 2019-11-2 09:20 编辑
#include <stdio.h>
#include <ctype.h>
void func(char * cstr)
{
        int a = 1;
        if (!isalpha(*cstr))//首个字符不是子母的情况计数-1
        {
                a = a - 1;
        }
        while (*(cstr + 1) != '\0')//指针+1避免数组越界
        {
                if (!isalpha(*cstr) && isalpha(*(cstr + 1))) /*判断相邻两个字符,如果第一个不是子母且第二个是子母,那么单词的个数就是这两个字符的对数,同时不受字符串中单词之间空格数量的影响,完美解决空格数量的问题;*/
                {
                        a++;
                }
                cstr++;
        }
        printf("字符串有%d个单词\n", a);
}

int main(int argc, char * argv[])
{
        char * a = "hello";
        char * b = "hello world";
        char * c = "   hello world       dffd       string          C";
        func(a);
        func(b);
        func(c);
        return 0;
}
----------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.16299.1087]
(c) 2017 Microsoft Corporation。保留所有权利。

E:\Users\86184\Documents\Code>c:\Users\86184\.vscode\extensions\ms-vscode.cpptools-0.26.0\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-oem4klku.rpa --stdout=Microsoft-MIEngine-Out-2tqayjy5.niw --stderr=Microsoft-MIEngine-Error-d0tasn14.2nt --pid=Microsoft-MIEngine-Pid-nem2dt1f.tmd "--dbgExe=E:\My Program\MinGW\bin\gdb.exe" --interpreter=mi
字符串有1个单词
字符串有2个单词
字符串有5个单词


E:\Users\86184\Documents\Code>

-----------------------------------------------------------------------------------
char * c = "   (空h)ello(空w)orld      (空d)ffd      (空s)tring         (空C) ('\0' 数组之外的值 ) ;//最后一项是结束符'\0'它和数组之外的值也构成了一组计数字符组
如果会正则表达式的话,代码还能更简短
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 11:51:47 | 显示全部楼层
wqz666 发表于 2019-10-27 10:10
str1 = ‘字符串’
num = 1   #统计单词数量
for i in str1:

虽然语言不一样但是逻辑都是相同得,这样不是不行,如果第一个单词就是空格呢,若单词之间不止一个空格呢,这样就不准确了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-27 12:08:12 | 显示全部楼层
本帖最后由 jackz007 于 2019-10-27 12:38 编辑
#include <stdio.h>

main(void)
{
        char s[256] , ch                                                ;
        int c , k , m                                                   ;
        for(m = 0 ; (ch = getchar()) != '\n' && m < 255 ;) s[m ++] = ch ;
        s[m] = '\0'                                                     ;
        for(k = 0 ; (k < m) && (s[k] == 0x07 || s[k] == 0x20) ; k ++)   ;
        for(c = 0 ; k < m ; k ++) {
                for(; (k < m) && (s[k] != 0x07 && s[k] != 0x20) ; k ++) ;
                for(; (k < m) && (s[k] == 0x07 || s[k] == 0x20) ; k ++) ;
                c ++                                                    ;
        }
        printf("%d\n" , c)                                              ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-1 21:49:16 | 显示全部楼层
遍历遇见空格直接continue
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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