一个简单程序引起的反思----算字符串最后一个单词的长度,单词以空格分割
2015-04-29 10:47
387 查看
//计算字符串最后一个单词的长度,单词以空格分隔
/*********************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 != '\0')
{
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,可是我没想到。
以后写代码,各种可能出现的情况,特别是边界条件,要想写出可靠的代码,这些一定要考虑到啊!
/*********************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 != '\0')
{
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,可是我没想到。
以后写代码,各种可能出现的情况,特别是边界条件,要想写出可靠的代码,这些一定要考虑到啊!
相关文章推荐
- 计算字符串最后一个单词的长度,单词以空格隔开
- 计算字符串最后一个单词的长度,单词以空格隔开
- leetcode 58 求一个包含空格的字符串中最后一个字符串的长度
- 华为机试——查找字符串中空格分割的单词的最大长度
- 【c++程序】 字符串最后一个单词的长度
- 试编写一个程序,输入一个字符串,统计其中有多少各单词?单词之间用空格分开
- 给定一个字符串s和一个单词dict的字典,确定s是否可以分割成一个或多个字典单词的空格分隔的序列。 s ="leetcode", dict =["leet", "code"].
- 计算字符串最后一个单词的长度,单词以空格隔开。
- 计算字符串最后一个单词的长度,单词以空格隔开
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”)
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”);
- 替换字符串中的空格&求字符串最后一个单词的长度
- 字符串最后一个单词的长度-简单题
- 华为oj:计算字符串最后一个单词的长度,单词用空格隔开
- 1——计算字符串最后一个单词的长度,单词以空格隔开
- 计算字符串最后一个单词的长度,单词以空格隔开。(华为在线编程题目)
- 1.计算字符串最后一个单词的长度,单词以空格隔开。
- 华为训练题目:初级——字符串最后一个单词的长度(简单题)
- Stirng类的常见用法:输出str长度,输出第一个"o",和最后一个"o"的索引,将str中的字符"l"替换成"m",字符串str按空格“ ”分割为2个字符串,比较这两个字符串是否相等。
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”)