在字符数组的开头添加空格

Adding spaces at the beginning of an array of chars

如标题所示,我需要在某些单词的开头添加 user-specified 个空格,使用字符数组。我需要在一个将我的数组作为参数并 returns 它的函数中完成它。这是我的代码:

#include <iostream>

using namespace std;

void writeDownCharArray(char t[], int sizee)
{
    for (int i=0;i<sizee;i++)
    {
        cout<<t[i];
    }
}

char * addSpaces(char t[], int ammountOfSpaces)
{
    int numberOfCharacters=0;
    for (int i=0; t[i]!=NULL; i++){numberOfCharacters++;} //checking the amount of characters in my array
    char t2[numberOfCharacters+10];
    for (int i=0; i<ammountOfSpaces; i++) {t2[i]=' ';} //adding the sapces
    for (int i=ilosc;i<numberOfCharacters+ammountOfSpaces;i++) {t2[i]=t[i-ammountOfSpaces];} //filling my new array with characters from the previous one
    return t2;
}

int main()
{
    int numberOfSpaces;
    char t[10];
    cout << "Text some word: ";
    cin.getline(t,10);
    cout<<"How many spaces?: ";cin>>numberOfSpaces;
    writeDownCharArray(addSpaces(t, numberOfSpaces), HERE);
    return 0;
}

现在:如何将它打印到屏幕上?如果我说 cout<<addSpaces(t, numberOfSpaces); 它实际上会在屏幕上打印一些奇怪的东西(不是数字,只是奇怪的字符)。如果我说 writeDownCharArray,那么我应该在 "HERE" 位置放什么?

解决这个问题的 C++ 方法是使用 std::string 比如

std::string add_spaces(const std::string & line, std::size_t number_of_spaces)
{
    std::string spaces(number_of_spaces, ' ');
    return spaces + line;
}

如果您不能使用 std::string 那么您将不得不处理动态内存分配并更改

char t2[numberOfCharacters+10];

char * ts = new char[numberOfCharacters + ammountOfSpaces + 1];

我们必须这样做,因为可变长度数组不是标准的,并且尝试 return 指向函数中声明的数组的指针会给您留下悬空指针,而尝试使用它是未定义的行为。

由于在函数中使用了 new[],您需要记住在完成后对 returned 的指针调用 delete[]。这是使用 std::string 的另一个好处,因为它会自行处理。

writeDownCharArray 而言,您不需要大小参数,因为 cout 可以处理 null 终止 c-strings。你可以简单地拥有

void writeDownCharArray(char t[])
{
    cout<<t;
}

然后你主要看起来像

char * foo = addSpaces(t, numberOfSpaces);
writeDownCharArray(foo);
delete [] foo;