我正在开发一个程序,该程序接受用户输入的单词列表,忽略大小写(大写和小写),然后使用功能qsort对它们进行排序。我在qsort上遇到问题,因为我不知道第3项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中有问题的位置带有“??”您可以提供的任何帮助都将受到赞赏!
这是一个作业
最佳答案
从技术上讲,您需要传递sizeof(string)
但是std::string不是普通类型,因此不允许使用qsort
对字符串数组进行排序。
25.5 C库算法
如果您使用的是C++和std::string,则还应该使用std::vector代替纯数组,并使用std::sort代替qsort。
关于c++ - C++中的qsort用于字符串数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16221362/