设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 744|回复: 6
打印 上一主题 下一主题

向量中各元素的长度?

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-5 00:37:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近复习STL ,练习一个简单题目"找出一句话(单词用空格隔开)中最长的单词和最短的单词"

我先把单词都存到一个string向量中,但不知道是否有有方法可以直接找出最大或最小,感觉我直接写的有些麻烦

希望指点一下 ,红色部分如何更简捷些就能求出向量中各元素的长度


程序代码:


#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
int max=0,min=10;
string sen("i have got a beautiful dream");//随便一句话(空格隔开各个单词)
string::size_type pos=0,pp=0;
vector<string> word,wmax,wmin;
vector<string>::iterator p;
while((pos=sen.find_first_of(" ",pos))!=string::npos)//通过空格分解单词
{
word.push_back(sen.substr(pp,pos-pp));//把单词存到容器中
pp=++pos;
}
pos=sen.rfind(" ")+1;
word.push_back(sen.substr(pos,sen.size()-pos)); //把最有一个单词存到容器中

p=word.begin();
while(p!=word.end())
{
max=(*p).size()>=max?(*p).size():max;
min=(*p).size()<=min?(*p).size():min;
++p;
}
for(p=word.begin();p!=word.end();++p)
{
if((*p).size()==max)
wmax.push_back(*p);
else if((*p).size()==min)
wmin.push_back(*p);
} //我写的好麻烦
p=wmax.begin();//简单的分别输出最长和最短的单词(s)
cout<<"the longest word:";
while(cout<<" ",p!=wmax.end()) cout<<*p++;
cout<<"\nlength is "<<max<<endl;
p=wmin.begin();
cout<<"the shortest word:";
while(cout<<" ",p!=wmin.end()) cout<<*p++;
cout<<"\nlength is "<<min<<endl;
return 0;
}
2#
发表于 2009-11-5 00:37:46 | 只看该作者
你这个就相当于冒泡排法
效率算是最低的
建议你用SHELL排序与直接插入排序组合一下
或者用堆排序等
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-5 00:37:48 | 只看该作者
用stringstream在存入vector的时候就把最大最小的找出来
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-5 00:37:49 | 只看该作者
getline(ss,word,' ')可以忽略空格
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-5 00:37:51 | 只看该作者
一般要是要效率
最好自己写
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-5 00:37:52 | 只看该作者
用快速排序
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-5 00:37:55 | 只看该作者
不需要先存进数组在比较长短吧,直接就可比较啊!
程序代码:
void LSString(string src,string &LStr,string &SStr)
{
int llen=0,slen=0;
int old=0,origin=0;
while(origin!=src.length())
{
origin=src.find(' ',old);
if(origin==-1)
origin=src.length();
if(llen<origin-old-1)
{
LStr.assign(src.begin()+old,src.begin()+origin);
slen=llen;
llen=origin-old-1;
if(slen==0)
slen=llen;
}
else if(slen>origin-old-1)
{
SStr.assign(src.begin()+old,src.begin()+origin);
slen=origin-old-1;
}
old=origin+1;
}
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-19 05:33 , Processed in 0.130264 second(s), 10 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表