找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 748|回复: 6

向量中各元素的长度?

[复制链接]
发表于 2009-11-5 00:37:45 | 显示全部楼层 |阅读模式 IP:江苏扬州
最近复习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;
}
发表于 2009-11-5 00:37:46 | 显示全部楼层 IP:江苏扬州
你这个就相当于冒泡排法
效率算是最低的
建议你用SHELL排序与直接插入排序组合一下
或者用堆排序等
回复

使用道具 举报

发表于 2009-11-5 00:37:48 | 显示全部楼层 IP:江苏扬州
用stringstream在存入vector的时候就把最大最小的找出来
回复

使用道具 举报

发表于 2009-11-5 00:37:49 | 显示全部楼层 IP:江苏扬州
getline(ss,word,' ')可以忽略空格
回复

使用道具 举报

发表于 2009-11-5 00:37:51 | 显示全部楼层 IP:江苏扬州
一般要是要效率
最好自己写
回复

使用道具 举报

发表于 2009-11-5 00:37:52 | 显示全部楼层 IP:江苏扬州
用快速排序
回复

使用道具 举报

发表于 2009-11-5 00:37:55 | 显示全部楼层 IP:江苏扬州
不需要先存进数组在比较长短吧,直接就可比较啊!
程序代码:
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;
}
}
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 07:43 , Processed in 0.209770 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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