最后一个单词的长度
任务目标:
输入一行字符串
将它读取
返回最后一个单词的长度
我的解答:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
getline(cin,str);
int length = str.length();
int i=0;
while(str[length]=='\0'||str[length]==' ')
length--;
for(;length>=0&&str[length]!=' ';--length)
i++;
cout<<i<<endl;
}
一点感想:
不知道为什么string在我的印象里是不能通过下标访问的单个字符的, 直到看到了别人的答案才发觉原来可以, 那么事情就简单了.
在用下标之前尝试用指针, 思路还是这样, 已知str地址, 根据长度得到末尾地址, 然后往回倒着检查, 麻烦多了, 最后没有用这种方法实现.
string可以用下标来读取想来其实也很正常. string在内存中占用一段连续的空间, 连续空间的好处就是随机存取很快(因为string不可变, 所以是读取), 所以有这样优势的string如果不能用下标访问反倒有些奇怪.
我还有一种思路.
1. 开始读, 读取到空格, 就停下来, 把这个空格前的单词保存下来, 进入到步骤2
2. 然后尝试读这个空格后面, 如果后面还是空格那么继续读空格后面, 不是空格就进行第3步
3. 如果后面能够读取到的不是'\0', 就重复第1步, 把前一个单词放弃掉, 是'\0'就结束了
到最后留下来的就是最后一个单词, 得到最后一个单词的长度就不用说了
但是显然这种方法更麻烦, 这一行字符串很长的时候运行速度也快不了
注意点:
还有就是string的下标从0开始(似乎不必强调), 那么str的长度length直接当作下标得到的其实是'\0', 上面也做了处理.
for(;length>=0&&str[length]!=' ';--length)里面如果没有写length>=0, 得到的结果可能比实际大很多.
下标可以是负数, 惊了. 说白了, 判断到string所在的内存前面去了, 那样的话什么时候遇到空格就难说了.
无关本题的感想:
C++ primer 11 第五版的书快看完了, 但是C++光看果然还是不够, 写起来感觉完全不同
还是要多写, 这篇文章就是一个开始

浙公网安备 33010602011771号