标题:[求助]从键盘上输入N个字符串用strcmp比较大小,并从小到大输出
只看楼主
坦然
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-4
 问题点数:0 回复次数:13 
[求助]从键盘上输入N个字符串用strcmp比较大小,并从小到大输出

请指点指点小弟

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;
typedef vector<vector<char> > Mat;
Mat input()
{ Mat a;
char ia;vector<char> b;
while(cin>>ia&&ia!='$')
b.push_back(ia);
a.push_back(b);
return a;
}
void mysort( Mat& a)
{
for(int pass=1;pass<a.size();++pass)
for(int i=0;i<a.size()-pass;++i)
if(strcmp(a[i],a[i+1])>0) a[i].swap(a[i+1]); //有点问题..不知怎么错的
}
void print( Mat& a)
{
for(int i=0;i<a.size();++i)
for(int j=0;j<a[i].size();++j)
cout<<a[i][j];
cout<<"\n";
}
void main()
{
Mat a=input();
mysort(a);
print(a);
}


给小弟修改一下谢谢了...如有另外的方法也行..告诉小弟一下

[此贴子已经被作者于2006-11-5 16:27:28编辑过]

搜索更多相关主题的帖子: strcmp 字符 键盘 从小到大 输出 
2006-11-05 16:13
坦然
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-4
得分:0 
帮帮小弟呀
2006-11-05 17:38
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
得分:0 
改成这样试试
for(int pass=1;pass<a.size();++pass)
{
for(int i=0;i<a.size()-pass;++i)
{
if( strcmp( a[i],a[i+1] ) > 0 )
{
a[i].swap(a[i+1]);
}
}
}

2006-11-05 18:00
坦然
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-4
得分:0 

谢谢了...可是还有错误如下...谁还帮我一下
error C2664: 'strcmp' : cannot convert parameter 1 from 'class std::vector<char,class std::allocator<char> >' to 'const char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

2006-11-05 21:33
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
得分:0 

这个函数本身没问题,可能是你vector的问题,看看有没有重载[]?等等。。。


天行健,君子以自强不息!!QQ:68660681
2006-11-06 12:24
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
得分:0 
你跟该成
std::vector<char>::iterator it;
it=a.begin();
然后用*it去比较.比较后在it++,应该可以

2006-11-06 13:26
坦然
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-4
得分:0 
以下是引用余来在2006-11-6 13:26:00的发言:
你跟该成
std::vector<char>::iterator it;
it=a.begin();
然后用*it去比较.比较后在it++,应该可以

不太明白..小弟刚学C++..好多都不懂..能调试后改的给小弟回上吗?

2006-11-07 17:10
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
这就是你的错误所在
[/code]
char ia;vector<char> b;
...
strcmp(a[i],a[i+1])>0
[/code]


把strcmp(a[i],a[i+1])>0
改成:a[i]>a[i+1]

[此贴子已经被作者于2006-11-7 18:46:02编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-11-07 18:44
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
得分:0 
wfpb说的对
a[i]是个vector<char>对象,可以直接比较大小。

另外的一种方法是:
if(strcmp((char*)&a[i],(char*)&a[i+1])>0)

[此贴子已经被作者于2006-11-7 22:51:41编辑过]


2006-11-07 22:49
坦然
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-4
得分:0 

谢谢你们..不过不知为什么编译没有错...但是程序没有达到"并从小到大输出"目的:
那位在帮小弟改一下算法....

2006-11-10 12:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-100885-1-1.html




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

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