新微赢技术网
标题:
向量中各元素的长度?
[打印本页]
作者:
~~精灵小姐$
时间:
2009-11-5 00:37
标题:
向量中各元素的长度?
最近复习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
你这个就相当于冒泡排法
效率算是最低的
建议你用SHELL排序与直接插入排序组合一下
或者用堆排序等
作者:
航母风云
时间:
2009-11-5 00:37
用stringstream在存入vector的时候就把最大最小的找出来
作者:
新时代
时间:
2009-11-5 00:37
getline(ss,word,' ')可以忽略空格
作者:
ξǒひ糀無蒛
时间:
2009-11-5 00:37
一般要是要效率
最好自己写
作者:
尐嘴亂儭
时间:
2009-11-5 00:37
用快速排序
作者:
QQ賊aiq嘿
时间:
2009-11-5 00:37
不需要先存进数组在比较长短吧,直接就可比较啊!
程序代码:
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;
}
}
欢迎光临 新微赢技术网 (http://bbs.weiying.cn/)
Powered by Discuz! X3.2