3

我要求用户在控制台上输入一个字符串。但我不知道字符串的长度

如何定义一个结构以适应可变长度的输入?

int main(){
    int i;
    char s[10];

    cout << "input string:";
    cin >> s;

    return 0;
}

如果输入字符串长度超过 10,示例代码将导致堆损坏。

4

6 回答 6

10

改用std::string。例如:

#include <string>

 std::string s;

 std::cout << "input string:";
 std::cin >> s;

或使用 std::getline 获取一行直到结束字符

std::getline(std::cin, s);
于 2013-05-28T07:19:31.590 回答
3

在 c++ 中,您应该使用std::string而不是 char[],尤其是对于可变长度字符串。

于 2013-05-28T07:20:08.277 回答
2

这是一个有效的通用示例,可​​让您读取包含空格的字符串:

#include <string>
#include <iostream>
int main()
{
  std::string s;
  std::cout << "Type a string\n";
  std::getline(std::cin, s);
  std::cout << "You just typed \"" << s << "\"\n";
}
于 2013-05-28T08:04:40.373 回答
1

cplusplus.com表示输入流中字符串的 >> 运算符使用空格作为分隔符。所以如果你需要你的字符串能够包含你必须使用的空格std::getline(...) (这与 istream::getline(...) 不同!!!!)

基本上是这样的:

std::string inputString;

std::getline(cin, inputString);

我的回答受到了这个答案的启发

于 2013-05-28T07:49:27.427 回答
0
#include <iostream>
#include <string>
using namespace std;

int main(){
    int i;
    string s;

    cout << "input string:";
    cin >> s;

    return 0;
}

使用 std::string 代替 char[]。

如果需要在输入后使用char[],可以参考这些问题:

std::string 到 char*

将字符串转换为 char*

例如,

string s1;
cin >> s1;

char *s2;
s2 = new char[s1.length() + 1]; // Including \0
strcpy(s2, s1.c_str());

delete []s2;

如果您不了解 new 和 delete,您可以使用 malloc 和 free。

于 2013-05-28T07:23:36.417 回答
0

基本上,建议您始终使用 std::string 来获取可变长度输入。仍然,如果您需要将输入存储在数组中以将其传递给函数或其他东西。你可以去做这个。虽然它很蹩脚。

/* #include <string> */
std::string s;
std::cout<<"Enter the String";
std::getline(std::cin, s);
char *a=new char[s.size()+1];
a[s.size()]=0;
memcpy(a,s.c_str(),s.size());
std::cout<<a;  

问候

Genocide_Hoax

于 2013-05-28T07:56:15.950 回答