在点燃火把之前,我正在尝试自学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给我的错误和警告列表:
答案 0 :(得分:4)
字符串常量应为双引号,而不是单引号:
"bob"
单引号用于字符常量。
然后,
int length (std::string array) {
return sizeof(array) / sizeof(array[0]);
}
应该以数组作为输入,但即使这样也无法工作,除非将其设为宏(这是让你被C ++专家公会禁止十年的可靠方法)或者无法修复通过使length
成为模板函数,这可能有点先进。请改用std::vector
,它有size
方法。
最后,
void output (int sortedItems) {
for (int i = 0; ; i++) {
std::cout << sortedItems[i] << std::endl;
}
}
并不真正采用int
,是吗?循环中的停止条件也会很好,以防止众所周知的龙飞出你的鼻子。
答案 1 :(得分: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*
。
答案 2 :(得分:0)
一次只修复一个错误 -
第一个是因为你需要双引号(“)而不是单引号(')
第二个 - 尝试int * sortedItems
只要一次一个地重复它们,编译完成后,调试器就会成为你的朋友