fabvy12 发表于 2019-10-27 09:18:58

数组和字符串

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

请问 怎么解决多空格问题。求助

ba21 发表于 2019-10-27 10:05:36

判断字符 遇到空格加1 最后'\0'结束再加1. 连续空格做个标记。不就搞定了

wqz666 发表于 2019-10-27 10:10:10

str1 = ‘字符串’
num = 1   #统计单词数量
for i in str1:
      if i == ' ':
            if str1 != ' ':
                  num += 1

这样可以吗,我是新手,可能用的方法比较low{:5_97:}

ba21 发表于 2019-10-27 10:23:31

wqz666 发表于 2019-10-27 10:10
str1 = ‘字符串’
num = 1   #统计单词数量
for i in str1:


你得用c解答

bin554385863 发表于 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'它和数组之外的值也构成了一组计数字符组
如果会正则表达式的话,代码还能更简短

bin554385863 发表于 2019-10-27 11:51:47

wqz666 发表于 2019-10-27 10:10
str1 = ‘字符串’
num = 1   #统计单词数量
for i in str1:


虽然语言不一样但是逻辑都是相同得,这样不是不行,如果第一个单词就是空格呢,若单词之间不止一个空格呢,这样就不准确了

jackz007 发表于 2019-10-27 12:08:12

本帖最后由 jackz007 于 2019-10-27 12:38 编辑

#include <stdio.h>

main(void)
{
      char s , ch                                                ;
      int c , k , m                                                   ;
      for(m = 0 ; (ch = getchar()) != '\n' && m < 255 ;) s = ch ;
      s = '\0'                                                   ;
      for(k = 0 ; (k < m) && (s == 0x07 || s == 0x20) ; k ++)   ;
      for(c = 0 ; k < m ; k ++) {
                for(; (k < m) && (s != 0x07 && s != 0x20) ; k ++) ;
                for(; (k < m) && (s == 0x07 || s == 0x20) ; k ++) ;
                c ++                                                    ;
      }
      printf("%d\n" , c)                                              ;
}

AmosAlbert 发表于 2019-11-1 21:49:16

遍历遇见空格直接continue
页: [1]
查看完整版本: 数组和字符串