题解 | #字符串最后一个单词的长度#牛客在线刷题基本用法

#include<iostream>
//#include<string>
using namespace  std;


//需求:计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。

int getLastWordLength(string str){
    if(str.length() == 0)
    {
        return -1;
    }
    int pos = str.find_last_of(' ');
    if(pos == -1){
       return str.length(); 

    }
    else{
        string tmp = str.substr(pos+1);
        return tmp.length();

    }
}

int main(int argc,char** argv){

    string str;
    while(cin>>str)
    {
        if(cin.get() == '\n')
            break;
    }
    int len = getLastWordLength(str);
    cout<<len<<endl;
    return 0;
}

记录一下:
好久没做过牛客网的题,此处记录一下运行报错的原因;
1、 输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000
此处指的是从控制台输入,所以需要使用scanf或者cin;,我之前使用str='hello world'; 使得始终无法运行通过,尴尬

2、 输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
输出不要加多余描述,否则就会报错,像这种:cout<<"len" << len<<endl;是完全错误,不符合要求

3、 scanf("%s",str),格式: scanf好像不支持读取数据到string 中,,,此处的str为new出来的指针
注意:

scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
要想使用scanf读取一串字符串,可以使用文件结束符EOF来完成,Linux下EOF为Ctrl+d, windows下好像是Ctrl+z,
EOF文件结束符:EOF是stdio.h文件里定义的特殊值,通常情况下#define指令会把EOF定义为“-1”,当scanf()读取到文件结尾时,就会返回EOF(如果是转换说明错误好像是会返回“0”)

while(scanf("%s",str)!=EOF){};

4、 scanf读取数据后,在通过getline(cin,str)读取,两个同时使用就会有问题,所以建议最好C用C,C++用C++。

附注:
支持vim编程,这个我喜欢

全部评论

相关推荐

11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
10-17 10:05
已编辑
北华大学 全栈开发
牛客872465272号:掉头发了哥
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务