// merge.cpp
// merges two containers into a third
#include <iostream>
#include <algorithm> //for merge()
using namespace std;
int src1[] = { 2, 3, 4, 6, 8 };
int src2[] = { 1, 3, 5 };
int dest[8];
int main()
{ //merge src1 and src2 into dest
merge(src1, src1+5, src2, src2+3, dest);
for(int j=0; j<8; j++) //display dest
cout << dest[j] << ' ';
cout << endl;
return 0;
}
这是我键入的代码和我期望的是一个已排序的合并数组,但输出结果如下:
1210537622105376321053763210537642105376521053766210537682105376
我改变了数据,重新检查了语法,但我觉得每件事都很好
在c ++中,这是一个字符' '
(单引号),这是一个字符串" "
(双引号)。避免对多个字符使用单引号,因为它是实现定义的。
固定
cout << dest[j] << ' ';
至
cout << dest[j] << ' '; // remove one whitespace
要么
cout << dest[j] << " "; // change to string
多字符字符常量被解释为整数。在你的情况下' '
是2105376
。使用g ++和clang ++ ' '
被翻译为8224 = 256 * ' ' + ' '
。在您的示例中,您忘记了一个空格,或者您的编译器使用不同的方法进行翻译:2105376 = 256 * 256 * ' ' + 256 * ' '+ ' '
启用并读取编译器警告。这是编译器告诉我的第一件事。
:13:24: warning: multi-character character constant [-Wmultichar]
' '
是一个多字符文字,因为它包含多个字符。它是int
类型并且具有实现定义的值,尽管256 * ' ' + ' '
很常见。因为它是int
,所以使用了与ostream
不同的char
重载,这可以解释你的输出。
请改用" "
。
这段代码中的错误非常明显。但是如果将来有人需要它,我可以告诉你我在这段代码中做了什么错误。
cout << dest[j] << ' '; //<----------the mistake is here,
单引号用c / c ++表示,用于包含单个字符。像'c'
,'+'
同样' '
。
c / c ++中的空格被视为单个字符。双引号用于包含多字符串。
所以要么用''
替换" "
,要么用' '
(单个空格)替换' '
(两个空格)。