我对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];
有人可以解释这两者之间的区别吗?我不明白为什么字符串出错。
由于
答案 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
数组)。