如何在C ++中使用间隔strcat?

时间:2014-01-23 17:40:22

标签: c++ arrays string matrix strcat

所以这是我的代码:

#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字符串,表示通过从左上角开始以顺时针螺旋读取数组而形成的句子。问题是..我在输出的开头有了奇怪的符号,并且在单词之间没有间隔。

1 个答案:

答案 0 :(得分:3)

使用C ++而不是C

由于您使用的是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];

如果您仍想使用C

您必须初始化输出字符串:

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

未初始化的字符串通常包含垃圾,strcat会添加垃圾,而不是将其删除。

此外,如果你想要分隔符,你应该明确地编码; strcat本身不会添加任何分隔符:

strcat(s, ",");