gpt4 book ai didi

c++ - 它如何排列单词使用qsort和string?

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:06 26 4
gpt4 key购买 nike

您好,我是 C++ 编程的初学者。

我正在研究qsort和swap。最近,我有一个关于计算机编程的问题。

#include <iostream>

using namespace std;

void save();

int arrange(const void* a, const void* b)
{
int p = *(char*)a;
int q = *(char*)b;

if (p < q)
return -1;
if (p == q)
return 0;
return 1;

}
int main() {

char work[] = "abc bbc lol faker";

cout << " before//"<<work << endl;

qsort(work, strlen(work), 1, arrange);

cout <<"after//"<< work << endl;
}

但是这个程序只把值(before//abc bbc lol fager after//aaabbcceefg...)

Q1。我想安排“Word”。使用单词的首字母(apple->a) 并将单词按字母顺序排列。

示例(输入::abc、ckk、dcd --> 程序 --> 输出::abc、ckk、dcd)

我不想要这个值“abcccddkk”...

我该怎么办?:(...

最佳答案

您有一个字符串,而不是一个字符串数组。

尝试声明work像这样*:

const char* work[] = {"abc", "bbc", "lol", "faker"};

接下来,你的比较函数应该使用 strcmp 因为我们需要字符串的字典顺序比较(< 上的 const char* 运算符将比较内存地址而不是字符串的内容)。

使用这个:

int arrange(const void* a, const void* b) 
{
const char* p = *(const char**)a;
const char* q = *(const char**)b;
return std::strcmp(p, q);
}

最后,调用qsort期望元素的数量,然后是每个元素的大小,将其更改为:

std::qsort(work, 4, sizeof(void*), &arrange);

Live Demo

*否则您需要用空格标记字符串以将它们放入数组中


免责声明:使用更现代的 C++ **

可以更轻松地完成这一切

C++11 解决方案将使用 std::sortvector 上(或 array )属于 std::string :

std::vector<std::string> words {"abc", "bbc", "lol", "faker"};
std::sort(words.begin(), words.end());

Better Demo

**当范围标准化时它可能会变得更好

关于c++ - 它如何排列单词使用qsort和string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46608448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com