本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5

方法一

>_code

#include <stdio.h>
#include <string.h>
#define N 500
int main(int argc, char const *argv[])
{
    char str[N] = "";
    char arr[N] = "";
    int i=0,j=0,count = 0;
    int first_flag = 0,true_flag = 0;
    int length;
    if(fgets(str,N,stdin)==NULL)
    {
        perror("fgets");
        return -1;
    }
    length = strlen (str);
    str[--length] = '\0';
    //先将str中单词取出,单词间只留一个空格
    while(str[i]!='\0')
    {
        if(str[i]!=' ')//遇到“单词”
        {
            true_flag = 1;
            arr[j] = str[i];//取出字符
            first_flag = 1;
            j++;
        }
        if(' '==str[i] && 1==first_flag)//遇到空格 && 空格前一个是字符
        {
            arr[j] = str[i];//取出空格
            first_flag = 0;
            j++;
        }
        i++;
    }
    //puts(arr);//test
    //以空格为分界判断条件统计单词个数
    length = strlen(arr);
    for(i=0;i<length-1;i++)
    {
        if(' ' == arr[i] && 1 == true_flag)
        {
            count++;
        }
    } 
    if(1==true_flag)//有单词,全空格时不执行count++
    {
        count++;  
    }
    printf("%d\n",count);
    return 0;
}

整理:让无规则的一串字符串先成为有规则的一串字符

规则:根据规则计数

方法二

>_code

#include <stdio.h>
#include <string.h>
#define N 500
int main(int argc, char const *argv[])
{
    char str[N] = "";
    int length,i,count = 0;
    int flag_now = 0,flag_front = 0;
    if(fgets(str,N,stdin)==NULL)
    {
        perror("fgets");
        return -1;
    }
    length = strlen (str);
    str[--length] = '\0';
    for(i=0;i<length;i++)
    {
        flag_front = flag_now;//记录前一个位置是啥
        if(str[i]==' ')
            flag_now = 0;//当前位置是空格
        else
            flag_now = 1;//当前位置是字符
        //获取“单词”首字符
        //初始前一个“位置”是0 && 当前位置看str[0]
        // 前一个位置是空格   && 当前位置是字符
        if(flag_front == 0 && flag_now == 1)
        {
            count++;
        }
    }
    printf("%d\n",count);
    return 0;
}

遍历到每个单词的开头时计数加1,找单词开头的特征

注意

#define N 过小无法通过网站的测试,会报答案错误,应该和它的测试程序的字符串大小有关

Last modification:2021 年 03 月 31 日 18 : 39 : 16