在标题中,我需要使用字符数组在某个单词的开头添加用户指定的空格数。我需要在一个函数中执行它,该函数将我的数组作为参数并返回它。这是我的代码:
#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
,那么我应该把什么放在“这里”呢?
答案 0 :(得分:6)
解决这个问题的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];
我们必须拥有这个,因为可变长度数组不是标准的,并且尝试返回指向函数中声明的数组的指针将留下悬挂指针并尝试使用它是未定义的行为。
由于函数中使用了new[]
,因此您需要记住在完成它后返回的指针上调用delete[]
。这是使用std::string
处理自身的另一个好处。
就writeDownCharArray
而言,您不需要大小参数,因为cout
可以处理空终止的c字符串。你可以简单地拥有
void writeDownCharArray(char t[])
{
cout<<t;
}
然后你的主要看起来像
char * foo = addSpaces(t, numberOfSpaces);
writeDownCharArray(foo);
delete [] foo;