在字符数组的开头添加空格
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;
如标题所示,我需要在某些单词的开头添加 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;