所以这是我的代码:
#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行(字面意思)长怪异符号?
编辑:对不起。以为没关系。输入最多为20x20个单词,每个单词不超过9个字符。输出应该是一个s字符串,表示通过从左上角开始以顺时针螺旋读取数组而形成的句子。问题是..我在输出的开头有了奇怪的符号,并且在单词之间没有间隔。答案 0 :(得分:3)
由于您使用的是C ++,因此您应该使用std::string
以C ++方式编写代码。您的一个问题(未初始化的字符串)可以通过这种方式修复,因为无法在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, ",");