c++ - 按字母顺序对字符串数组排序的问题

标签 c++ debugging

在点燃火炬之前,我正在尝试自学C ++。我觉得我已经掌握了它,但是如果您知道我的意思,我就必须深入了解。我正在尝试调试一个简单的程序以使其自学。该程序的目标是按字母顺序对要打印的字符串数组进行排序。当将数组传递给我的length()函数时,我可能应该在这里使用指针,但是我还没走那么远。有这么多错误,我不确定错误实际上在哪里。请告诉我,这有点像缺少分号。我非常确定if(itemsToSort [j]
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:在函数'void output(int)'中:
/Users/Tyler/Desktop/sort/main.cpp:6:错误:数组下标的类型'int [int]'无效
/Users/Tyler/Desktop/sort/main.cpp:在函数'int main(int,char * const *)'中:
/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&)的参数1 [with _CharT = char, _Traits = std :: char_traits,_Alloc = std :: allocator]'
/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&)的参数1 [with _CharT = char, _Traits = std :: char_traits,_Alloc = std :: allocator]'
/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&)的参数1 [with _CharT = char, _Traits = std :: char_traits,_Alloc = std :: allocator]'
/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&)的参数1 [with _CharT = char, _Traits = std :: char_traits,_Alloc = std :: allocator]'
/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&)的参数1 [with _CharT = char, _Traits = std :: char_traits,_Alloc = std :: allocator]'
/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&)的参数1 [with _CharT = char, _Traits = std :: char_traits,_Alloc = std :: allocator]'
/Users/Tyler/Desktop/sort/main.cpp:14:错误:请求从'std :: string *'转换为非标量类型'std :: string'
/Users/Tyler/Desktop/sort/main.cpp:15:错误:未在此范围内声明“字符串”
/Users/Tyler/Desktop/sort/main.cpp:15:错误:预期为`;'在“ 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:错误:预期为','或';'在“ {”令牌之前

最佳答案

首先:

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*

关于c++ - 按字母顺序对字符串数组排序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5265565/

相关文章:

google-chrome - 当我单击某个对象时,Google Chrome 控制台会自动滚动

node.js - (问)我们如何使用 AWS api gateway 调试本地 websocket

java - 当我们在eclipse Debug模式下修改某个对象时,类加载是如何发生的

php - PHP解析/语法错误;以及如何解决它们

c++ - 绘制点之间的水平距离

c++ - `std::mem_fn`如何在gcc 7.1.0中检测到noexceptness

c++ - 使固定大小的 block 池分配器适应某些 STL 容器

c++ - 文件编码如何影响 C++11 字符串文字?

c++ - 在调用 abort() 时设置断点

c++ - 将 const char* 转换为 wstring