Странный вывод при использовании функции merge () в стандартной библиотеке шаблонов в c ++ - PullRequest
0 голосов
/ 03 декабря 2018
// 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

Я изменил данные, перепроверил синтаксис, но каждыйвсе хорошо, я думаю

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

' ' является литералом , состоящим из нескольких символов , так как содержит более одного символа.Это тип int и имеет значение, определенное реализацией, хотя 256 * ' ' + ' ' встречается часто.Поскольку это int, используется перегрузка ostream, отличная от char, которая учитывает ваши выходные данные.

Используйте взамен " ".

0 голосов
/ 22 марта 2019

Ошибка в этом коде очень очевидна.Но все же, если кому-то это понадобится в будущем, я могу сказать вам, какую ошибку я совершил в этом коде.

Местоположение ошибки

cout << dest[j] << '  '; //<----------the mistake is here,

Теория

Одиночные кавычкив C / C ++ используется для включения отдельных символов.Как и 'c', '+' аналогично ' '.

Пробел в c / c ++ считается одним символом.Двойные кавычки используются для заключения многосимвольных строк.

Решение

Поэтому либо замените '' на " ", либо замените ' ' (два пробела) на ' ' (один пробел).

0 голосов
/ 03 декабря 2018

В 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...