- 前言
- 一、题目描述
- 二、解题思路
- 1.1 从前往后取空格之后的字符(加)
- 1.2 从前往后取空格之后的字符(减)
- 2.1 从后往前取字符,到空格时停止
- 3 最精简的代码
- 总结
- 参考文献
前言
一个菜鸟的学习经历,题目出自牛客网的华为机试。答案和解题思路借鉴了许多评论区的大佬们的代码。
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目描述计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
示例:
输入: hello nowcoder 复制 输出: 8 说明: 最后一个单词为nowcoder,长度为8二、解题思路 1.1 从前往后取空格之后的字符(加)
从空格之后开始计数进行累加
代码如下(示例):
#include#include using namespace std; int main(){ char s; int size=0; do{ s=getchar(); if ( s == ' '){ size=0; } //当取到空格后计数器清零 else if ( s != '/n'){ size++; } //取到字符后加1 else{ } //此处强调一下else if后可跟条件,eles后面不能跟条件,所以这个else是有必要的 }while(s != 'n/'); cout< 1.2 从前往后取空格之后的字符(减) 找到最后的空格位置(长度),再由整段字符长度减去。
ps:需要注意的是 s[0] 才是第一个字符,故在计算长度时需要-1代码如下(示例):
#include#include using namespace std; int main() { string s; getline(cin, s); int length = s.length(); int tmp=-1; for(int i=0; i if(s[i] == ' ') { tmp = i; } } cout< 2.1 从后往前取字符,到空格时停止 由于题目中申明字符串末尾不以空格为结尾,故此处不考虑结尾有空格的情况。
代码如下(示例):
#include3 最精简的代码#include using namespace std; int main() { string s ; while ( getline(cin,s) ){ int n=0, flag=1 ; for ( int i = s.length() - 1 ; i >= 0 ; i-- ) { if ( s[i] != ' ' ){ flag = 0; n++ ; } else{ break; } } cout << n << endl; } return 0 ; } 巧妙利用了cin的读取逻辑,简单来说就是以cin>>的方法使用时会以空格、tab、换行符(n)为分隔符,重新开始读取。真的惊艳到我了。
代码如下(示例):
#includeusing namespace std; int main() { string s; while(cin >> s); cout << s.size(); return 0; }
总结一道并不复杂的题目,解法和思路很多,择优选择。
虽然很菜,但是我很爱学。
参考文献cin相关内容:
https://blog.csdn.net/k346k346/article/details/48213811



