如何在c ++中输入长度为10 ^ 6的字符串?

时间:2015-09-25 12:33:19

标签: c++ string

我们必须输入一个字符串,例如: 1·; = | S | < = 10 ^ 6(字符串的长度) 并执行一些操作,让我们离开操作,我只想知道如何输入像10 ^ 6这样的长字符串? 我们可以像这样的字符S [1000001]; 或者哪种方式更好? 请帮助

4 个答案:

答案 0 :(得分:4)

忘记使用c风格的字符串并使用std::string代替。 std::string可以容纳std::string::max_size个字符。在今天的大多数实现中,应该是4294967294个字符。

使用std::string的好处是它会自动增长以适应您需要的大小。由于内存是动态分配的,因此您不必担心堆栈空间不足。您可能会在堆上耗尽内存,因为您需要大约4 GB的RAM来保存最大字符串。

答案 1 :(得分:2)

  

我们可以像这样的字符S [1000001];

你可以...但是如果S是一个自动变量,你将把大部分的堆栈空间花在那个数组上,你可能会耗尽(取决于可用的堆栈空间和多少)你计划的其余部分需要)。

应该动态分配像这样的大型数组。不幸的是,要说如何动态分配大数组/对象并不容易。这取决于一些事情,如:

  • 总堆栈空间量取决于平台,可在运行或链接时配置。
  • 程序其余部分所需的堆栈空间量。这取决于你有多深的嵌套函数调用以及你的函数需要多少内存。

我使用几千字节作为经验法则来决定我是否需要动态内存。或者在递归函数中的几十个字节,预计会深入。

  

或哪种方式更好?

std::string动态分配它的缓冲区,提供操作字符串的方法,确保你不会忘记零终结符并负责管理(如果你手动进行动态分配,这将是一个问题) 。我强烈建议你使用它。

答案 2 :(得分:1)

取决于字符串字符是否为unicode

你可以使用:

   char *txt = new char[1000000]  
   wchar_t *txt = new wchar_t[1000000];

你也可以尝试使用std :: string或者std :: wstring,就像NathanOliver说的那样

答案 3 :(得分:0)

使用std::string

或者,如果您的数据没有调整大小,您可以选择使用简单的char数组。由于char数组的大小,我建议您使用new进行分配,并将其与delete一起使用。否则,您可能会耗尽堆栈大小并导致堆栈溢出。