题解 | #字符串最后一个单词的长度#牛客在线刷题基本用法
#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编程,这个我喜欢。