| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1478 人关注过本帖
标题:向量中各元素的长度?
只看楼主 加入收藏
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
 问题点数:0 回复次数:6 
向量中各元素的长度?

最近复习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;

}

搜索更多相关主题的帖子: 向量中 元素 长度 string 单词 
2007-03-24 23:26
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
你这个就相当于冒泡排法
效率算是最低的
建议你用SHELL排序与直接插入排序组合一下
或者用堆排序等

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2007-03-25 08:03
dlcdavid
Rank: 3Rank: 3
来 自:成都
等 级:新手上路
威 望:6
帖 子:193
专家分:0
注 册:2005-12-23
收藏
得分:0 
用stringstream在存入vector的时候就把最大最小的找出来

为了C++,我放弃了课本
为了高考,我又放弃了C++
现在而今眼目下,我能做什么?www.
2007-03-26 09:44
dlcdavid
Rank: 3Rank: 3
来 自:成都
等 级:新手上路
威 望:6
帖 子:193
专家分:0
注 册:2005-12-23
收藏
得分:0 

getline(ss,word,' ')可以忽略空格


为了C++,我放弃了课本
为了高考,我又放弃了C++
现在而今眼目下,我能做什么?www.
2007-03-26 09:46
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 

一般要是要效率
最好自己写


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2007-03-26 12:12
corrupt
Rank: 2
等 级:新手上路
威 望:3
帖 子:535
专家分:0
注 册:2004-9-29
收藏
得分:0 
用快速排序

2007-03-26 13:16
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

不需要先存进数组在比较长短吧,直接就可比较啊!

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;
}
}


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-03-26 14:45
快速回复:向量中各元素的长度?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036409 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved