华为oj 字符串最后一个单词的长度

<img alt="http://img.bbs.csdn.net/upload/201508/06/1438867109_670158.jpg" src="http://img.bbs.csdn.net/upload/201508/06/1438867109_670158.jpg" />
很简单的一道题  不过作者比较笨 调了几次也只通过第一个测试 代码见楼下
#include <iostream>
#include <string>

int main()
{
	char a[130];
	fgets(a, sizeof(a), stdin);
	int len = strlen(a);
	int num = 0;
	for (int i = 0;i < len - 1;i++) {
		if (a[i] == ' '&&a[i+1]!=' '&&a[i+1]!='
') {
			num = 0;
			continue;
		}
		if (a[i] != ' ')
			num += 1;
	}
	std::cout << num;
    return 0;
}
分析一下为什么会出错想了想,可能是因为没有写循环的原因,不过楼下的代码过了三道测试

#include <iostream>
#include <string>
using namespace std;
int main(void)
{
	string  input;
	while (1)
	{
		cin >> input;
		char ch = getchar();
		if (ch == '
' || ch == EOF)
			break;
	}
	cout << input.length() << endl;

}

发现这里出现了一些问题,就是当最后一位是空格的时候输入没有关闭

得到启发,又写了一个c语言的程序

#include <stdio.h>
#include <string.h>

int main()
{
    char a[130];
    while(gets(a)){
        int len = strlen(a);
        int num = 0;
        for (int i = 0;i < len;i++) {
            if (a[i] == ' '&&a[i + 1] != ' '&&a[i + 1] != '
') {
                num = 0;
                continue;
            }
            if (a[i] != ' '&&a[i]!='	')
                num += 1;
        }
        printf("%d
",num);
    }
    return 0;
}


通过,问题来了

当最后一位是空格的时候 输出是0 ,竟然通过了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!





原文地址:https://www.cnblogs.com/odin-luyu/p/5371777.html