我正在开发一个程序,该程序接受用户输入的单词列表,忽略大小写(大写和小写),然后使用功能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/

10-12 16:08