массивы — Как strcat с интервалами в C ++?

Итак, вот мой код:

#include <iostream>
#include <string.h>
using namespace std;

const int MAX_SIZE1 = 20;
const int MAX_SIZE2 = 10;

int main()
{
char a[MAX_SIZE1][MAX_SIZE1][MAX_SIZE2];
int n, i, j;
cin >> n;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
cin >> a[i][j];

char s[MAX_SIZE1 * MAX_SIZE1 * (MAX_SIZE2 - 1) + 1];
int hor = 0, vert = 0;
while (hor < n / 2 && vert < n / 2)
{
for (i = vert; i < n - vert; i++)
strcat(s, a[hor][i]);
for (i = hor + 1; i < n - hor; i++)
strcat(s, a[i][n - vert - 1]);
for (i = n - vert - 2; i >= vert; i--)
strcat(s, a[n - hor - 1][i]);
for (i = n - hor - 2; i > hor; i--)
strcat(s, a[i][vert]);
hor++;
vert++;
}
if (n % 2)
for (i = vert; i < n - vert; i++)
strcat(s, a[hor][i]);
else
for (i = hor; i < n - hor; i++)
strcat(s, a[i][vert]);
cout << s << endl;
return 0;
}

У меня есть несколько вопросов. Как изменить его, чтобы получить интервалы между словами в выведенной строке s? И как избавиться от неуклюжих 50 строк (буквально) длинных странных символов в начале моего вывода?

РЕДАКТИРОВАТЬ: я извиняюсь. Думаю, это не имеет значения. Ввод должен быть не более 20×20 массивов слов, которые не превышают 9 символов каждое. Вывод должен быть строкой s, которая представляет предложение, сформированное чтением массива по часовой стрелке, начиная с верхнего левого угла. Проблема в том, что в начале вывода я получил странные символы и не получал интервалов между словами.

-4

Решение

Поскольку вы используете C ++, вам действительно нужно писать код на C ++, используя std::string, Одна из ваших проблем (неинициализированная строка) может быть исправлена ​​таким образом, так как невозможно определить неинициализированную строку в C ++.


замещать

#include <string.h>

от

#include <string>

замещать

char s[MAX_SIZE1 * MAX_SIZE1 * (MAX_SIZE2 - 1) + 1];

От

std::string s;

замещать

strcat(s, a[hor][i]);

от

s = s + a[hor][i];

Вы должны инициализировать вашу выходную строку:

char s[MAX_SIZE1 * MAX_SIZE1 * (MAX_SIZE2 - 1) + 1] = "";

Неинициализированные строки обычно содержат мусор, и strcat добавляет к этому, а не удаляя его.

Кроме того, если вы хотите разделители, вы должны кодировать это явно; strcat Сам не добавляет разделители:

strcat(s, ",");
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]