cin和字符串出错

Error with cin and string

本文关键字:出错 字符串 cin      更新时间:2023-10-16

我对C++还很陌生,很难理解这两者之间的区别。当我尝试像下面这样的输入流时

#include <iostream>
#include <string>
string* str = new string[50];
cin >> str;

我得到以下错误:

错误:没有运算符">>"与这些操作数匹配。操作数类型为:std:istream>>std:string*

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

char* str = new char[50];

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

感谢

在您的代码中:

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类的更多信息,请访问此链接。给出的描述是:

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

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

正如其他人所指出的,在C中,字符串基本上是一个字符数组。C++提供了一种使用"字符串"更简单的方法。

下页介绍了这两种类型,并举例说明:http://www.tutorialspoint.com/cplusplus/cpp_strings.htm

string* str = new string[50];

是一个包含string s的数组。

char* str = new char[50];

是包含char s的数组。


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