将字符串用户输入读入任意大小的数组

时间:2018-03-11 01:46:42

标签: c++

所以我目前正在尝试将用户输入读入char数组,但我看过的每个例子都在初始化时定义了数组的大小。实际上,我正在寻找的是一种读取用户输入的方法(可能使用getline,因为我希望将用户输入作为字符串读取)并将其存储在数组中。

假设用户将此输入到程序中:

This is a string

我希望数组大小能够适合该字符串,并将空终止符放在“g”之后。然后,另一个用户可以将他们想要的任何大小的字符串放入程序中,但我基本上希望我的程序总是使数组大小足以包含从输入中读取的内容。

我无法让这个工作,并且已经花了几个小时浏览无穷无尽的页面,所以任何帮助都将不胜感激!感谢。

2 个答案:

答案 0 :(得分:0)

正如托尼·德罗伊(Tony Delroy)在评论中说的那样(我还不能发表评论),你应该使用 std :: string

如果你真的需要一个char数组,作为函数的参数,你可以使用函数 c_str()来获取 std :: string 作为 const char * 数组,或者如果需要 char * 数组,则可以复制 c_str()给出的数组内容使用

到动态分配的数组
char* cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());

作为加数,您需要包含标题 cstring 才能使用strcpy函数并需要使用 delete [] cstr 来删除 char * 当你不再使用它时

#include <iostream>
#include <cstring>
using namespace std;

// string argument as std::string
void foo(string str) {
    // function body
}

// argument as const char*
void bar(const char* str) {
    // function body
}

// argument as char*
void baz(char* str) {
    // function body
}

int main() {
    string str;

    getline(cin, str);

    foo(str);
    bar(str.c_str());

    char* cstr = new char[str.length() + 1];
    strcpy(cstr, str.c_str());
    baz(cstr);

    delete[] cstr;
    return 0;
}

答案 1 :(得分:0)

你应该使用std :: string。 null终止符在std :: string中没有用,因为你可以使用:

string.size() 

获取用户输入的大小。

如果想逐个遍历像char数组这样的字符串,它应该像这样:

std::string input;
std::getline(std::cin, input);

for (int i = 0; i < input.size() ; i++)
{
   std::cout << input[i];
}