最后一个单词的长度

任务目标:

输入一行字符串

将它读取

返回最后一个单词的长度

 

我的解答:

#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++光看果然还是不够, 写起来感觉完全不同

还是要多写, 这篇文章就是一个开始

posted @ 2020-04-27 21:16  灰雾核心  阅读(145)  评论(0)    收藏  举报