【发布时间】:2013-04-19 17:42:34
【问题描述】:
我正在开发一个程序,它获取用户输入的单词列表,忽略大小写(大写和小写),然后使用函数 qsort 对它们进行排序。我在使用 qsort 时遇到问题,因为我不知道将什么作为第三项 qsort(array, sizeOfArray, ??, funcCompare) 传递。有人能指出我正确的方向吗?
using namespace std;
int compare(const void* , const void*);
const int SIZE = 100;
void main()
{
int i = 0;
int s = 0;
size_t size = 0;
string words;
string list[SIZE];
for (i = 0; i < SIZE; i++)
{
cout << "Please enter a word. Press ^Z to quit: " << endl;
cin >> words;
transform(words.begin(), words.end(), words.begin(), ::tolower);
if (words.length() > size)
{
size = words.length();
}
list[i] = words;
if (cin.eof())
{
s = i;
break;
}
}
qsort(list, s, ?? , compare);
for (int j = 0; j < i; j++)
{
cout << list[j] << endl;
}
}
int compare(const void* p1, const void *p2)
{
char char1, char2;
char1 = *(char *)p1; // cast from pointer to void
char2 = *(char *)p2; // to pointer to int
if(char1 < char2)
return -1;
else
if (char1 == char2)
return 0;
else
return 1;
}
qsort 中有问题的位置有 '??'感谢您提供任何帮助!
这是一个作业
【问题讨论】:
-
这是一项作业,还是您正在为一般问题寻找一个好的 C++ 解决方案?
-
显然使用
std::sort和std::vector<std::string>。 -
如果必须使用
qsort,请不要使用std::string。如果你真的需要,在你的数组中使用 pointers 指向std::string。