您的位置:首页 > 其它

华为OJ<字符串最后一个单词的长度>

2018-01-22 10:14 295 查看

华为OJ

<字符串最后一个单词的长度> 题目链接

题目描述

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

输入描述:

一行字符串,非空,长度小于5000。

输出描述:

整数N,最后一个单词的长度。

输入示例:

输入:hello world

输出:5

解法1:普通字符串处理

运行时间:3ms

占用内存:436k

#include<iostream>
#include <vector>
#include<stack>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;

void getFinalWordLength(string str)
{
int leng=str.size();
string *temp=new string[leng];  //string数组,这里有一定内存浪费,可优化
int p=0;
for (int i=0;i<leng;i++)   //以空格为分割,将字符串的每个单词放入多个string中
{
if(str[i]!=' ')
temp[p]+=str[i];
else
++p;
}
for(int i=leng-1;i>=0;i--)
{
if(temp[i]!="")
{
cout<<temp[i].length();
break;
}
}
}

int main()
{
string str;
while(getline(cin,str))
{
getFinalWordLength(str);
cout<<endl;
}
return 0;
}


解法2:string的find_last_of函数

运行时间:3ms

占用内存:384k

#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
while (getline(cin, str))
{
int pos = 0,npos = -1;
pos = str.find_last_of(' ');     //查找最后一个空格的位置,查找失败返回-1
if(pos == npos)      //仅有一个单词情况
cout << str.size() << endl;
else
cout << (str.size() - (pos+1)) << endl;     //多个单词情况
}
return 0;
}


解法3:正则表达式

运行时间:4ms

占用内存:504k

#include<iostream>
#include <string>
#include<regex>
using namespace std;

void getFinalWordLength(string str)
{
//多个单词情况,查找条件为:以一个空格开始,后面接n个字母(0<=n<=99),并且到了字符串末尾
regex reg1("\\s[a-zA-Z]{0,99}$");
smatch res_regex1;
regex_search(str, res_regex1, reg1);
string search_res1 = "";
search_res1 = res_regex1.str();
if (search_res1.length() == 0)
{
//一个单词情况,查找条件为:从字符串头开始,查找n个连续字母(0<=n<=99),并且到了字符串末尾
regex reg2("^[a-zA-Z]{0,99}$");
smatch res_regex2;
regex_search(str, res_regex2, reg2);
search_res1 = res_regex2.str();
cout << search_res1.length() ;
return;
}
cout << search_res1.length() - 1;
}

int main()
{
string str;
while (getline(cin, str))
{
getFinalWordLength(str);
cout << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: