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,可是我没想到。

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

    博客内容只为本人学习所感转载亦或自写,不足或错误之处请大家不吝赐教
  • 相关阅读:
    c#异步执行方法
    sql 增加、修改、删除触发器小例子
    c#解决高并发加锁(Lock)
    sql中写事物和c#中执行事物
    socket 服务器浏览器与服务器客户端实例
    c# 写txt
    vs2003 序列化json
    一个完整的Windows 服务从创建到安装卸载
    js封装长度验证
    jquery 右下角弹出框
  • 原文地址:https://www.cnblogs.com/niupan369/p/4465310.html
Copyright © 2011-2022 走看看