如何通过添加空格或其他字符来读取用户输入?

时间:2011-06-12 09:56:23

标签: c++ string

我想阅读用户输入,如下所示:

char *text  = new char[20] ;
cin >> text ;

但如果用户输入“hello”,我希望我的其他空字符填充空格或-,如:

"hello------------------------"

我该怎么做?

3 个答案:

答案 0 :(得分:6)

没有标准和快速方法来执行此操作。我可以想到一些选择。


假设我们有:

char *text  = new char[20];
cin >> text;

注意 - 我们 需要 才能知道容量是20!我建议你为此使用一些常量,特别是如果它也将用于其他字符串。


好的,第一个选项 - 使用std::stringstream

std::stringstream ss;
ss << setw( 20 - 1 ) << setfill( '-' ) << text;
//            ^^^^ we need one byte for the '\0' char at the end
ss >> text;

但这很慢。


手工填写字符:

int length = strlen( text );
for( int i = length; i < 20 - 1; ++i ) // again - "20-1" - '\0'
{
    text[ i ] = '-';
}
text[ 20 - 1 ] = '\0'; // don't forget to NULL-terminate the string

最好的方式 ,据我所知 - 摆脱这些char*件事(你已将问题标记为)和只需使用std::string

std::string sText;
std::cin >> sText;
sText.resize( 20, '-' ); // NOTE - no need to NULL-terminate anything

Voilà! (:

这种方式更清晰,你不需要在最后使用delete[] text;(有时候这不是那么微不足道,特别是在delete[]之前有一些例外的情况下 - 这将是给你100%的内存泄漏。当然,你总是可以使用智能指针..但智能指针呢?!:))


当然,你可以写19而不是20-1,我只是想“突出”-1,以防你使用某个常量。

答案 1 :(得分:2)

你们没有人说过 null终结者角色 - &#39; \ 0&#39;。在C / C ++中使用字符串时非常重要。例如,如果您希望文本长度为20个符号,则应为21个字符分配内存。这仅适用于 Ata 的信息。你的问题的答案是:

char *text = new char[21];
//start initialization
for (int i=0;i<20;i++) {
    text[i] = '-';
}
text[20] = '\0';
//end initialization
cout << "Your input: " << endl;
cin >> text;//get the user input
text[strlen(text)]='-';//change the automatically added '\0' with '-'
cout << text << endl;

请注意,您还应该检查用户是否输入了比您已分配的内存更长的内容。


编辑:嗯, Kiril 比我更快(更精确)。 :)

答案 2 :(得分:0)

您可以通过多种方式完成此操作。例如,假设您的字符串满为19“ - ”:(请注意,您使用20定义数组,您只能获得19个真实字符加上最终\0

const char* dashes = "--------------------";

然后在你写的时候阅读字符串:

char *text  = new char[20] ;
cin >> text ;

然后您可以使用strcat复制其余字符,使用strlen来确定读取字符串的长度:

strcat(text, dashes + strlen(text));

这会将休息的19 - length of the text附加到文本中。请注意,我将该特定数量添加到dashes指针。

最后,>>只会读一个字。要阅读完整的输入行,您必须使用getline