首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个C++程序,能不能帮忙看一下有什么错啊该怎么处理

2013-07-01 
一个C++程序,能不能帮忙看一下有什么错啊?请求用户输入10首歌名,保存在一个字符指针数组中,然后请按照用户

一个C++程序,能不能帮忙看一下有什么错啊?
请求用户输入10首歌名,保存在一个字符指针数组中,然后请按照用户输入的顺序、字母顺序和字母逆序分别显示这些歌名。
//C++ for the fifth time the first question in the homework
//According to certain requirements to save the title of songs the user's input in a character array
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

const numberOfSong=10;

int main ()
{
char *songName[numberOfSong],*name;
int i,j;
int longestNameLength; //longestNameLength is the longest song name's length

cout << "Please input the longest song name's length :\n"; //tell the user input the longestNameLength
cin >> longestNameLength;

cout << "Please input ten songs's names!\n"; //tell the user input the songs'names
//input the song'name
for ( i=0;i < numberOfSong;i++ )
{
for ( j=0;j < longestNameLength;j++ )
{
if ( *(songName[i]+j) != EOF )
   cin >> *(songName[i]+j);
}
}

cout << "According to the order of user input output the songs'names :\n";
for ( i=0;i < numberOfSong;i++ )
{
for ( j=0;j < longestNameLength;j++ )
cout << *(songName[i]+j);
cout << "\n";
}

cout << "According to the alphabetical order output the songs'names :\n";
for ( i=0;i < numberOfSong;i++ )
{
if ( *songName[i] > *songName[i++] )
{
*name = *songName[i];
*songName[i] = *songName[i++];
*songName[i++] = *name;
}
else if ( *songName[i] == *songName[i++] )
{
for ( j=0;j < longestNameLength;j++ )
{
if ( *(songName[i]+j) > *(songName[i]+j+1) )
{
                   *name = *songName[i];
       *songName[i] = *songName[i++];
       *songName[i++] = *name;
}
}
}
}
    for ( i=0;i < numberOfSong;i++ )
{
for ( j=0;j < longestNameLength;j++ )
cout << *(songName[i]+j);
cout << "\n";
}

cout << "According to the alphabetical reversed order output the songs'names :\n";
for ( i=0;i < numberOfSong;i++ )
{
if ( *songName[i] < *songName[i++] )
{
*name = *songName[i];
*songName[i] = *songName[i++];
*songName[i++] = *name;
}
else if ( *songName[i] == *songName[i++] )
{
for ( j=0;j < longestNameLength;j++ )
{
if ( *(songName[i]+j) < *(songName[i]+j+1) )
{
                   *name = *songName[i];


       *songName[i] = *songName[i++];
       *songName[i++] = *name;
}
}
}
}
    for ( i=0;i < numberOfSong;i++ )
{
for ( j=0;j < longestNameLength;j++ )
cout << *(songName[i]+j);
cout << "\n";
}

return 0;
}
C++ C语言 指针数组 字符串
[解决办法]
我看別人代碼是這樣用
char* str;
cin>>str; 
[解决办法]
可以用map来实现啊:

#include <iostream>
#include <map>
#include <string>
#define  SONG_COUNT 10
using namespace std;
void main()
{
map<string,int> songMap;
string songName;
cout<<"请输入歌名"<<endl;
for (int i=0;i<SONG_COUNT;i++)
{
cin>>songName;
songMap.insert(make_pair(songName,i));
}
map<string,int>::iterator iter;
//用户输入顺序输出
cout<<"用户输入顺序输出"<<endl;
for (int i=0;i<SONG_COUNT;i++)
{
for (iter=songMap.begin();iter!=songMap.end();iter++)
{
if (iter->second == i)
{
cout<<iter->first<<endl;
}
}
}
//字母顺序输出
cout<<"字母顺序输出"<<endl;
for (iter=songMap.begin();iter!=songMap.end();iter++)
{
cout<<iter->first<<endl;
}
//字母逆序输出reverse_iterator
cout<<"字母逆序输出"<<endl;
map<string,int>::reverse_iterator reiter;
for (reiter=songMap.rbegin();reiter!=songMap.rend();reiter++)
{
cout<<reiter->first<<endl;
}
system("pause");
}


map本身的插入就是按照key来排序的,把string当成key,int标记用户输入的第几首歌。输入完,map中歌曲就自动按照字母顺序排好了,接下去只要顺序输出,逆序输出,判断输出就可以实现了。

热点排行