Итак, вот мой код:
#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, которая представляет предложение, сформированное чтением массива по часовой стрелке, начиная с верхнего левого угла. Проблема в том, что в начале вывода я получил странные символы и не получал интервалов между словами.
Поскольку вы используете 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, ",");
Других решений пока нет …