首字母字符串排序的问题

ufdxkm 2009-03-31 04:00:35

#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#include <string>


using namespace std;
int main()
{
vector<string> file(200);
ifstream read;
char name[40];
cout<<"Enter the filename: ";
cin>>name;
cin.get();
read.open(name);
if(!read.is_open())
{
cout<<"don't read the file "<<name<<endl;
return 0;
}


/**************************** 读取 ****************************/

for(int i=0;i<200;i++)
{
getline(read,file[i]);
}


/**************************** 写入 ****************************/

ofstream infile;
infile.open("haha.txt");
for(int i=0;file[i][0]!=NULL;i++) //根据ASCII排序
{
for(int j=1;file[j][0]!=NULL;j++)
{
if(file[i][0]<file[j][0])
{
file[j].swap(file[i]); //交换两个容器的元素
}
}
}

for (int i=0;i<200;i++)
{
infile<<file[i]<<endl;
}

read.close();
cout<<"Write OK.\n";
return 0;
}








上面这些代码。我的目的是根据首字母排序
首先从一个文件读取 然后排序输出到另一个文件 。

比如这些:

BeginPaint() 开始绘制窗口
CreateWindow() 建立一个窗口
DefWindowProc() 执行内定的消息处理
DrawText() 显示字符串
DispatchMessage() 将消息发送给窗口消息处理程序
EndPaint() 结束窗口绘制
GetMessage() 从消息队列取得消息
GetClientRect() 取得窗口显示区域的大小
GetTextMetrics() 获得系统字体
GetScrollinfo() 取得scrollbar信息
GetStockObject() 取得一个图形对象
SelectObject() 将选择的画笔送进装置内容
InvalidateRect() 创建无效矩形产生WM_PAINT消息
InvalidateRgn() 产生WM_PAINT消息
LineTo() 从MoveToEx设置的点到LineTo的点画线
MessageBox() 显示消息框
MoveToEx() 更新当前position
PlaySound() 播放一个声音
Polyline() 按一系列特定的坐标画线
PostQuitMessage() "退出程序"消息
ReleaseDC() 释放一个环境装置
RegisterClass() 注册窗口类别
ScrollWindow() 卷动指定的区域
ScrollWindowEx() 卷动指定的区域
SetScrollinfo() 设置scrollbar信息
ShowWindow() 显示窗口
SetTextAlign() 文字对齐
TranslateMessage() 翻译消息
UpdateWindow() 指示更新窗口
GetDC() 取得装置内容代号
GetWindowDC() 取得整个窗口的句柄
CreateDC() 取得一个句柄
DeleteDC() 删除一个句柄
CreateIC() 取得一个资讯内容代号
CreateMetaFile() 建立metafile
CloseMetaFile() 删除metafile
GetDeviceCaps() 取得设备咨询
GetNearestColor() 取得某一色彩接近的纯色
SaveDC() 保存装置内容状态
RestoreDC() 恢复装置内容状态
SetPixel() 在制定的xy坐标设定图素
GetPixel() 取得指定图素坐标
LineTo() 画直线
Polyline() 画一系列相连的直线
PolylineTo() 画一系列相连的直线
PolyPolyline() 画多组相连的线
Arc() 画椭圆线
PolyBezier() 画贝塞尔曲线
PolyBezierTo() 画贝塞尔曲线
ArcTo() 画椭圆线
AngleArc() 画椭圆线
PolyDraw() 画一系列相连的线以及贝塞尔曲线
Rectangle() 画矩形
Ellipse() 画椭圆
RoundRect() 画带角的矩形
Pie() 画椭圆的一部分,使其看起来像一个扇形
Chord() 画椭圆的一部分,呈弓形
GetCurrentPositionEx()取得目前位置
CreatePen() 创建画笔
CreatePenIndirect() 创建逻辑画笔
DeleteObject() 删除画笔对象
GetObject() 取得LOGPEN结构成员
GetCurrentObject() 取得目前画笔句柄
SetBkColor() 设置填入空隙的背景色
SetBkMode() 设置填入背景的模式



排序之后不是我想要的结果
应该是abcd...的顺序。怎么u开头的在前面。

还有这样的功能有没有更好的代码
比如 vector<string> file(200);
能不能在运行时决策要创建的对象数。


谢谢大家

...全文
369 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
M_S_D_N 2009-03-31
  • 打赏
  • 举报
回复

for(int i=0;file[i][0]!=NULL;i++) //根据ASCII排序
{
// for(int j=1;file[j][0]!=NULL;j++)
for (int j = i ; file[j][0] != NULL ; j ++)// 1改成i
{
if(file[i][0]<file[j][0])
{
file[j].swap(file[i]); //交换两个容器的元素
}
}
}


即使那样改了,用法还是很不好,vector里的尾元素判断怎么可以用 file[i][0]!=NULL ?!
并且,字符串比较,只比较首字母,有意义吗?
M_S_D_N 2009-03-31
  • 打赏
  • 举报
回复
都用了stl里的vector,为什么就不用stl里的algorithm呢?
sws_martian 2009-03-31
  • 打赏
  • 举报
回复
字典排序吧,可以试试qsort()函数很好用的!
yangqidong 2009-03-31
  • 打赏
  • 举报
回复
for(int i=0;file[i][0]!=NULL;i++) //根据ASCII排序
{
for(int j=i+1;file[j][0]!=NULL;j++)//j=1改成j=i+1
{
if(file[i][0]<file[j][0])
{
file[j].swap(file[i]); //交换两个容器的元素
}
}
}

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧