按字母顺序排序名称,数组错误

时间:2016-12-10 11:43:34

标签: c++ arrays sorting

我想按字母顺序排序名称。我一直在网上寻找一些例子,我修改了一些我发现的代码

#include <regex>
#include <ctime>
using namespace std;

int main() {
    double prev = 0;
    for (int i=10000; ; i*=2) {
        clock_t t0 = clock();
        regex_match("", regex(".{" + to_string(i) + "}"));
        double t = double(clock() - t0) / CLOCKS_PER_SEC;
        printf("%7d %7.3f seconds (factor %.3f)\n", i, t, prev ? t / prev : 1);
        prev = t;
    }
}

第24行#include<iostream> #include <cstring> #include <string> using namespace std; void main() { char* str[]{"john", "mike", "alex", "rick", "chris"}; char* temp[] = {"temp"}; int i, j, z; bool status = true; if (status) { status = false; for (int i = 0; i < 5; i++) { z = strcmp(str[i], str[i + 1]); if (z > 0) { temp = str[i]; str[i] = str[i + 1]; str[i + 1] = temp; status = true; } } cout << "Strings (Names) in alphabetical order : \n"; for (i = 0; i<5; i++) { cout << str[i] << "\n"; } } 我收到错误消息:

  

char * temp [1]必须是可修改的左值,并且在第26行&#39; =&#39;是报告&#34; char temp [1] char *类型的值不能分配给char *&#34;

类型的实体

我正在使用visual studio 2015

1 个答案:

答案 0 :(得分:0)

以下是您在代码中所做的一些错误,您不应该这样做。

str[]初始化为

 char* str[] = {"john", "mike", "alex", "rick", "chris"};

否则,您将收到与C++编译器版本相关的警告。

第一个for循环应

 for (int i = 0; i < 4; i++)  // i < 4 or you'll get sagmentation fault
        {
            z = strcmp(str[i], str[i + 1]);
            if (z > 0)
            {
                temp[0] = str[i];    // temp[0] instead of temp
                str[i] = str[i + 1];
                str[i + 1] = temp[0];
                status = true;      // here also temp[0]
            }

最后一个,此代码不会对str[]进行排序。你输出的代码(在obove修改之后)将是这样的:

Strings (Names) in alphabetical order : 
john
alex
mike
chris
rick

部分排序。要对此数组进行完全排序,您必须使用与nested for loops相同的两个bubble sort