首页 文章

按字母顺序排序字符串数组的问题

提问于
浏览
0

在你点燃火把之前,我正在努力教自己C.我觉得我已经很好地掌握了它,但如果你知道我的意思,我必须深入到底 . 我正在尝试调试一个我想要自学的简单程序 . 该程序的目标是按字母顺序对打印出的每个字符串数组进行排序 . 在将数组传递给我的length()函数时,我可能应该在这里使用指针,但我还没有那么远 . 有很多错误,我不确定错误实际上在哪里 . 请告诉我这是一个缺少分号的东西 . 我很确定if(itemsToSort [j] <firstInAZOrder)行不会工作,但我再次尝试学习语言,我必须从某个地方开始 .

main.cpp中:

#include <iostream>
#include "stringarray.h"

void output (int sortedItems) {
    for (int i = 0; ; i++) {
        std::cout << sortedItems[i] << std::endl;
    }
}

int main (int argc, char * const argv[]) {
    std::string itemsToSort[] = {
        'bob', 'john', 'tyler', 'anthony', 'luke', 'eric'
    };
    std::string sortedItems[length(itemsToSort)];
    string firstInAZOrder;

    for (int i = 0; i < length(itemsToSort); i++) {
        firstInAZOrder = itemsToSort[i];

        for (int j = i + 1; j < length(itemsToSort); j++) {
            if (itemsToSort[j] < firstInAZOrder) {
                firstInAZOrder = itemsToSort[j];
            }
        }

        sortedItems[i] = firstInAZOrder;
    }

    output(sortedItems);
    return 0;
}

stringarray.cpp:

int length (std::string array) {
    return sizeof(array) / sizeof(array[0]);
}

stringarray.h:

int length (std::string array);

以下是Xcode给我的错误和警告列表:

  • /Users/Tyler/Desktop/sort/main.cpp:12:3:警告:多字符字符常量 -

  • /Users/Tyler/Desktop/sort/main.cpp:12:18:警告:字符常量太长

  • /Users/Tyler/Desktop/sort/main.cpp:12:27:警告:字符常量太长

  • /Users/Tyler/Desktop/sort/main.cpp:在函数_1034408中:

  • /Users/Tyler/Desktop/sort/main.cpp:6:错误:数组下标的类型'int[int]'无效

  • /Users/Tyler/Desktop/sort/main.cpp:在函数_1034410中:

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:无法从'int'转换为'const char*'

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:初始化'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]'的参数1

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:无法从'int'转换为'const char*'

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:初始化'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]'的参数1

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:无法从'int'转换为'const char*'

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:初始化'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]'的参数1

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:无法从'int'转换为'const char*'

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:初始化'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]'的参数1

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:无法从'int'转换为'const char*'

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:初始化'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]'的参数1

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:无法从'int'转换为'const char*'

  • /Users/Tyler/Desktop/sort/main.cpp:13:错误:初始化'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]'的参数1

  • /Users/Tyler/Desktop/sort/main.cpp:14:错误:从'std::string*'转换为非标量类型'std::string'已请求

  • /Users/Tyler/Desktop/sort/main.cpp:15:错误:'string'未在此范围内声明

  • /Users/Tyler/Desktop/sort/main.cpp:15:错误:预期`; ' before ' firstInAZOrder'

  • /Users/Tyler/Desktop/sort/main.cpp:17:错误:从'std::string*'转换为非标量类型'std::string'已请求

  • /Users/Tyler/Desktop/sort/main.cpp:18:错误:'firstInAZOrder'未在此范围内声明

  • /Users/Tyler/Desktop/sort/main.cpp:20:错误:从'std::string*'转换为非标量类型'std::string'已请求

  • /Users/Tyler/Desktop/sort/main.cpp:26:错误:'sortedItems'未在此范围内声明

  • /Users/Tyler/Desktop/sort/main.cpp:29:错误:'sortedItems'未在此范围内声明

  • /Users/Tyler/Desktop/sort/stringarray.cpp:10:错误:'string'不是'std'的成员

  • /Users/Tyler/Desktop/sort/stringarray.cpp:10:错误:在'{'令牌之前预期','或';'

3 回答

  • 3

    首先:

    std::string itemsToSort[] = {
        'bob', 'john', 'tyler', 'anthony', 'luke', 'eric'
    };
    

    引号字符(')只能用于单个字符 . 为此使用双引号(“):

    std::string itemsToSort[] = {
        "bob", "john", "tyler", "anthony", "luke", "eric"
    };
    

    下一个:

    void output (int sortedItems) {
        for (int i = 0; ; i++) {
            std::cout << sortedItems[i] << std::endl;
        }
    }
    

    这个函数只需要一个整数,而这根本不是你想要的 . 假设您想学习如何使用指针,您可以尝试以下方法:

    void output (int* intArray, int arraySize) {
        for (int i = 0; i < arraySize; ++i) {
            std::cout << intArray[i] << std::endl;
        }
    }
    

    此函数接受指向内存中某些整数的指针,以及那里的数字 . 这解决了下一个知道 for 循环应该何时终止的问题 .

    在实际代码中,您将使用 std::vector 之类的内容代替 int* .

  • 0

    字符串常量应为双引号,而不是单引号:

    "bob"
    

    单引号用于字符常量 .

    然后,

    int length (std::string array) {
        return sizeof(array) / sizeof(array[0]);
    }
    

    应该采用一个数组作为输入,但即便如此,除了通过使它成为一个宏(这是让你从C专家公会被禁止十年的一种可靠方法)或者通过使 length 成为模板函数之后,它将被修复_1034454 . 可能有点先进 . 请改用 std::vector ,它有一个 size 方法 .

    最后,

    void output (int sortedItems) {
        for (int i = 0; ; i++) {
            std::cout << sortedItems[i] << std::endl;
        }
    }
    

    真的没有 int ,是吗?循环中的停止状态也很好,以防止众所周知的龙飞出你的鼻子 .

  • 4

    只需一次修复错误 -

    首先一个是因为你需要双引号(“)而不是单引号(')

    第二个 - 尝试int * sortedItems

    只需要一次一个地重复它们,编译完成后,调试器将成为你的朋友

相关问题