2.c++代码实现:
#include<iostream>
#include<string>
using namespace std;
unsigned last_word_length( const string &line);
//主程序:用来从标准输入端获取字符串line ,显示结果
unsigned main(int argc, char **argv)
{
string line;
getline(cin,line);
cout<<"字符串最后一个单词的长度为:"<< last_word_length(line) <<endl;
return 0;
}
//函数 int last_word_length( const string &line)
//函数说明:获取字符串line中最后一个单词的长度,单词是以空格进行分割
//参数说明:因为只是对字符串line进行检索,没有对字符串line进行改变,为了提高运行效率 所以用传 常引用的方式
//进行参数传递
//返回值:最后一个单词的长度,当字符串为空串,或者为空格串返回值为 0,当字符串长度大于等于128返回-1,其余
//情况返回最后一个单词的长度。
//测试用例:1.line 为空串 (串中什么都没有)2.空格串 (字符串不为空,但是串中的字符全为 空格)
//3.line只有一个单词(1)单词的长度大于等于128 (2)单词的长度小于128
//4.line中有多个单词 (1)字符串line长度大于等于128 (2)字符串line长度小于128
unsigned last_word_length( const string &line)
{
//1.判参 2.循环找单词 3.返回长度
if( line.length() >= 128 )
return (0);
//循环找单词
const string delims(" ");//单词分隔符,这里是用 空格进行分割
string::size_type begIdx, endIdx;//begIdx代表单词的起始位置,endIdx代表单词的结束位置
//在c++标准库中的string 对字符串的索引只能用 std::string::size_type
begIdx = line.find_first_not_of(delims);//找到单词的起始位置
string::size_type length = 0;//记录单词的长度,初始化为0
while(begIdx != string::npos)
{
endIdx = line.find_first_of(delims,begIdx);//单词的最后一个字符
if( endIdx == string::npos)//字符串line中的最后一个单词
{
endIdx = line.length();
}
length = endIdx - begIdx;//单词的长度
begIdx = line.find_first_not_of ( delims,endIdx);//下一单词的起始位置
}
return (static_cast<int>(length));//提高程序的可移植性,将 string::size_type转换为int
}
3.测试结果: