cin和string出错

时间:2014-09-23 18:10:29

标签: c++ string char

我对C ++很新,我很难理解这两者之间的区别。当我尝试输入流时,如下所示

#include <iostream>
#include <string>

string* str = new string[50];
cin >> str;

我收到以下错误:

错误:没有操作员&#34;&gt;&gt;&#34;匹配这些操作数。操作数类型是:std:istream&gt;&gt; STD:字符串*

但是,当我使用char尝试以下选项时,我没有任何问题。

char* str = new char[50];

有人可以解释这两者之间的区别吗?我不明白为什么字符串出错。

由于

3 个答案:

答案 0 :(得分:1)

正如其他人所说,在C中,字符串基本上是一个字符数组。 C ++使用&#34; string&#34;。

提供了一种更简单的方法

以下页面介绍了这两种类型,并附有示例:http://www.tutorialspoint.com/cplusplus/cpp_strings.htm

答案 1 :(得分:1)

在您的代码中:

string* str = new string[50];

这会创建一个包含50个string个对象的数组。 string类封装了自己的动态大小的字符数组。您无需指定长度,string类会为您隐藏所有苦差事。

cin >> str;

现在失败了,因为cin不知道如何处理50个字符串的数组。我认为你打算做的只是创建一个新的空白字符串,例如:

string str;

cin知道如何处理string个对象。所以你可以使用如下代码:

cin >> str;

使用string的一个优点是,当str超出范围(函数退出)时,将进行正确的清理。没有必要像您对测试代码那样进行delete str

关于此代码:

char* str = new char[50];

这将创建一个大小为50的固定大小的字符数组。cin知道如何处理一个简单的字符数组(char *),因此处理它没有问题。

有关string课程的更多信息,请参阅此link。给出的描述是:

  

字符串是表示字符序列的对象。

     

标准字符串类通过类似于标准字节容器的接口为这些对象提供支持,但添加了专门用于操作单字节字符串的功能。

答案 2 :(得分:0)

string* str = new string[50];

是一个包含string s。

的数组
char* str = new char[50];

是一个包含char s。

的数组

在C中,char数组与string相同。因此,当您使用cin时,需要将输入传递给string(或者在您的情况下,为char数组)。