zoukankan      html  css  js  c++  java
  • 一个简单程序引起的反思----算字符串最后一个单词的长度,单词以空格分割

    //计算字符串最后一个单词的长度,单词以空格分隔

    题目

    /*********************2****************/
    #include <iostream>
    #include <string>
    using namespace std;
    int GetLastWorld(const string str);
    int main()
    {
    string str;
    getline(cin, str);
    int ret = GetLastWorld(str);
    cout <<ret<<endl;
    return ret;
    }

    int GetLastWorld(const string str)
    {

    ////入参检查
    if (str.length() == 0)
    {
    return 0;
    }
    int ret = 0;
    char* chr = (char*)str.c_str();
    while (*chr != '')
    {
    chr++;
    }

    char* end = chr;
    chr--;

    while (*chr != ' ')
    {
    ret++;
    chr--;

    /////如果一个字符串没有空格比如输入为"hello"
    if (ret == str.length())
    {
    break;
    }
    }

    char* beg = chr;
    return ret;
    }

    做完这一题后提交,结果测试案例只通过了两个,总是有个测试案例没通过。很是纳闷,这么简单的一个小程序,bug会在哪呢?思前想后,我显示考虑了入参检查,这是最容易想到的一点,结果还个测试案例没通过,于是,我只能继续思考,突然想到,如果只有一个连续的字符,这个字符是第一个单词,也是最后一个单词,那么判断结束条件while (*chr != ' '){ret++;chr--;}就不会被执行。这是个隐含bug,可是我没想到。

    以后写代码,各种可能出现的情况,特别是边界条件,要想写出可靠的代码,这些一定要考虑到啊!

    博客内容只为本人学习所感转载亦或自写,不足或错误之处请大家不吝赐教
  • 相关阅读:
    sql DATEDIFF 函数
    电控宝 命令
    dart 函数练习
    json对象和json字符串有啥区别啊
    windows 下 node 入门
    windows 下Nginx 入门
    SQL十进制和十六进制相互转换
    Action向视图传值的6种方式(转)
    从匿名方法到 Lambda 表达式的推演过程
    vue 入门1 组件管理
  • 原文地址:https://www.cnblogs.com/niupan369/p/4465310.html
Copyright © 2011-2022 走看看