一个简单程序引起的反思----算字符串最后一个单词的长度,单词以空格分割

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

题目

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

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

博客内容只为本人学习所感转载亦或自写,不足或错误之处请大家不吝赐教
原文地址:https://www.cnblogs.com/niupan369/p/4465310.html