一个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中歌曲就自动按照字母顺序排好了,接下去只要顺序输出,逆序输出,判断输出就可以实现了。