尝试在c ++中按字母顺序排列单词时出现段错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试在c ++中按字母顺序排列单词时出现段错误相关的知识,希望对你有一定的参考价值。

我是C ++的新手,我正在尝试编写代码,以字母顺序对我从控制台输入的某些单词进行排序。我不知道为什么,但是我得到细分错误。您能帮我吗?

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <cstring>

using namespace std;
int arrange (const void * a, const void * b)
{
  //return ( *(int*)a - *(int*)b );
    return (strcmp(*(const char **)a, *(const char **)b));
}

int main() {
    char words[50][50];
    int i=0, n;
    cout << "Enter the number of words to be ordered:";
    cin >> n; 
    int length = 0;
    for (i=0;i<n;i++) {
        cin >> words[i];
        cout << words[i];
    }

    qsort(words, n, sizeof(words[0]), &arrange);
}

这是我的代码的样子

答案

这更多是一个C问题。 qsort例程传入两个值:不指向值的指针;因此您的比较应该是

int arrange (const void * a, const void * b)
{
    return (strcmp((const char *)a, (const char *)b));
}
另一答案

您的代码比C ++更像C。您应该使用vectorstringsort。并检查您输入的内容是否失败。

而且,您的代码应该是可剪切粘贴的。您缺少标题和using语句。

您对qsort(C例程)的使用不会按照您的使用方式工作。 C ++提供了sort,它更适合您要解决的问题。

例如...

#include <algorithm>
#include <iostream>
#include <iterator>
#include <stdexcept>
#include <string>
#include <vector>

using std::begin;
using std::cin;
using std::cout;
using std::end;
using std::ostream;
using std::sort;
using std::runtime_error;
using std::string;
using std::vector;

static ostream& operator<<(ostream& o, vector<string> const& words) {
    char const* sep = "";

    for(auto const& word : words) {
        o << sep << word;
        sep = ", ";
    }

    return o;
}

int main() {
    vector<string> words;
    cout << "Dati nr de cuvinte de ordonat:";
    int n;
    if (!(cin >> n)) throw runtime_error("bad input");

    for (int i = 0; i < n; ++i) {
        string word;
        if (!(cin >> word)) throw runtime_error("bad input");
        words.push_back(word);
    }

    cout << "Before sorting: " << words << "
";
    sort(begin(words), end(words));
    cout << "After sorting: " << words << "
";
}

以上是关于尝试在c ++中按字母顺序排列单词时出现段错误的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode953

dplyr:在 R 中按字母顺序排列列

如何在C中按顺序对带有数字和字母的文件名进行排序?

NSPredicate 在 CoreData 中按字母顺序获取记录

优化一个简单的缺失词算法[重复]

在 Android 中按字母顺序对 Hashmap 值类型进行排序