单词长度-week8-C语言习题集

单词长度(4分)
题目内容:
你的程序要读入一行文本,其中以空格分隔为若干个单词,以‘.’结束。你要输出这行文本中每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如“it’s”算一个单词,长度为4。注意,行中可能出现连续的空格。

输入格式:
输入在一行中给出一行文本,以‘.’结束,结尾的句号不能计算在最后一个单词的长度内。

输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

输入样例:
It’s great to see you here.

输出样例:
4 5 2 3 3 4
时间限制:500ms内存限制:32000kb

/*
    本题解法有个不理解的一点是:while第一次循环用scanf输入多个字符;但是在循环中只是判断一个字符,之后的while循环
    再经过scanf的时候不输入,自动读下一个字符,是不是跟scanf("%c",)中的c有关???
    答:以下是个人猜测:
        当程序运行时遇到scanf,程序会去检查shell,看看有没有数据存在shell的缓冲区,如果没有,shell就等待键盘输入,此时
        键盘进行输入,到shell的缓冲区,直到按下回车,scanf由于括号里面是%c,此时从缓冲区读入一个字符到程序,接着程序运行
        下一步,当下个循环又遇到scanf时,程序会去检查shell的缓冲区有无数据,因为第一次输入多个字符,而只读了第一个字符,
        所以这个时候缓冲区还有数据,就不去启动等待键盘的输入,而是直接从缓冲区读入第二个字符,以此类推;
        总结:
            也就是说scanf从shell缓冲区读入数据,读多少,是看scanf("")中的内容,而第一次键盘输入可以输入多个数据到shell的
            缓冲区,直到按下回车;
    1,本题不是考虑读入整个字符串,而是每次输入一个字符就读一个字符,并记录相关数字,用char ch 记录就好;
        不考虑用 char *ch???
        答:char ch 表示输入的字符,字符可以有很多个;而char *ch 表示ch指向字符串,只有一个;
    2,记录了第一个单词的长度,当遇到空格时如何保存第一个单词的长度,去记录第二个单词的长度?答:其实有个while循环
        每次遇到空格就先printf一个数字,只是程序运行太快,直观上以为printf是一次性输出,其实是一个循环一次输出,
        用debug就能看出端倪
    3,字符是用单引号表示
    4,对多余空格的处理,我选择判断是否cnt是零,如果是continue;(continue很巧妙,仔细体会)
*/
#include 
#include 

int main()
{
    char ch= '0';
    int cnt = 0;
    while(ch != '.'){
        scanf("%c",&ch);
        if (ch == '.'){
            printf("%d",cnt);
            break;
        }
        else if (ch != ' '){
            cnt++;
        }
        else {
            if (cnt != 0){
                printf("%d ",cnt);
                cnt = 0;
            }
            else{
                continue;
            }
        }

    }
    return 0;
}

你可能感兴趣的:(c)