C++ 如何将用户输入传递到char[]
我按照一个示例反转了一个非常好的字符串,但我希望使用cin输入字符串,而不是将值硬编码为char文本[]。这能做到吗?我在谷歌上搜索了很多文章,但到目前为止还没有成功。 我试着使用c_str()和strcpy(编译器不喜欢我使用)C++ 如何将用户输入传递到char[],c++,C++,我按照一个示例反转了一个非常好的字符串,但我希望使用cin输入字符串,而不是将值硬编码为char文本[]。这能做到吗?我在谷歌上搜索了很多文章,但到目前为止还没有成功。 我试着使用c_str()和strcpy(编译器不喜欢我使用) //使用要反转的文本创建一个字符数组。 字符文本[]=“你好”; //获取数组中的字符数,将有一个额外的0,因此需要去掉1。 int nChars=sizeof(text)-1; coutint ReverseStringProg(){ 字符串文本; cout文本;
//使用要反转的文本创建一个字符数组。
字符文本[]=“你好”;
//获取数组中的字符数,将有一个额外的0,因此需要去掉1。
int nChars=sizeof(text)-1;
coutint ReverseStringProg(){
字符串文本;
cout文本;
std::reverse(text.begin(),text.end());
库特
但我希望使用cin输入字符串,而不是将值硬编码到char text[]
C++很容易使用<代码> STD::String < /C> >代替原始字符数组:
std::string text;
// ...
std::getline(cin,text);
代码的其余部分可以处理text.c_str()
返回的const char*
指针,或者更好的方法是使用字符串的andrend()
迭代器来获得一个反置副本:
std::copy(text::rbegin(), text.rend(),std::begin(text));
从c++17开始,您还可以使用该函数执行以下操作:
std::reverse(text.begin(), text.end());
如果您不喜欢std::string
,有很多方法可以读入字符数组
注意:读取字符数组可能会使数组溢出。此外,数组中必须有NUL终止字符才能将数组视为C样式字符串。
使用cin
您可以使用cin
读取字符数组
char my_array[8];
std::cin >> my_array;
此技术将跳过初始空白,然后将字符读入my_数组
,直到遇到空白或输入终止
注意:如果输入大于数组大小,则输入将继续写入超出数组末尾的内容,从而导致未定义的行为。创建大型数组可能会浪费内存。
使用读取
您可以使用read
方法读取固定数量的字符:
静态常量无符号整数限制=16
char your_array[LIMIT];
std::cin.read(your_array, LIMIT);
使用上述代码,您需要将NUL终止字符放置在适当的位置:
size_t count = std::cin.gcount();
if (count == LIMIT)
{
--count;
}
your_array[count] = '\0';
使用std::string
:
首选使用std::string
:
std::string input_text;
std::cin >> input_text; // Read space separated text, i.e. a *word*.
std::getline(std::cin, input_text); // Read a line of text.
使用<代码> STD::String 在C++中为天编程。我不确定这是如何简洁地回答你的问题。只有代码没有解释。“谢谢你的负面投票,这有很大帮助。”当然,这对未来的研究是有帮助的。那后面的部分呢?我正在回答问题的标题和第一句话。谢谢你。这真的很有帮助,你知道我想要实现什么,并提供了一些很好的解释。
size_t count = std::cin.gcount();
if (count == LIMIT)
{
--count;
}
your_array[count] = '\0';
std::string input_text;
std::cin >> input_text; // Read space separated text, i.e. a *word*.
std::getline(std::cin, input_text); // Read a line of text.