getline(cin,_string);
Posted
技术标签:
【中文标题】getline(cin,_string);【英文标题】: 【发布时间】:2012-08-19 12:39:17 【问题描述】:我知道 完美运行
但这不会:
char* _chArr = new char;
getline(cin,_chArr);
即使这样也行不通:
char* _chArr = new char[30];
getline(cin,_chArr);
char*
不是字符串吗??
【问题讨论】:
【参考方案1】:不是 char* 是字符串
不,它是指向char
的指针,仅此而已。函数std::getline
做了一些在char *
上不容易完成的很酷的事情(扩展字符串等等)。
【讨论】:
不是 char* x =new char;一个字符串? @user1609974 不,不是。它是一个指针,您只分配了一个字节。 @user1609974 That's right. 所以我必须使用 cin.getline 来使用 char* 并指定之前的长度 @user1609974 不确定您的意思。你在用什么 C++ 书?【参考方案2】:请从逻辑上考虑。 char* 只是一个指向字符类型内存块的指针。您必须为其分配一些动态内存,然后使用 strcpy() 或手动将数据复制到其中。 C++ 不支持直接输入。字符串实际上是自身包含大小的对象。它们是由该行业的专家设计的,它们提供了直接输入和动态增长,就像内置功能一样。 字符串和 cstring 是有区别的。 Cstring 是 char*。
【讨论】:
对不起各位,我已经在上面的代码中输入了“new”!不是 char* x =new char*;或 char* x =new char* [100];这两个不被认为是字符串吗?? 不,你非常非常困惑。尽管字符串可能看起来像字符数组,但它本身就是一种类型。它们相似,但不一样。这就像说一个与你有相似之处的人——就是你。这不是真的,编译器是绝对的。如果您有一些 char* 出于某种原因想要传递给 getline() - 您需要先将其转换为字符串。 这些被认为是 cstrings。不要将 cstrings 与字符串混淆。 cstring 中不允许直接输入。在字符串或静态 char 数组中输入,然后将数据复制到 char* 可以这样操作..... char str[50] ; cin.getline (str, 50) ; _chArr = 新字符 [strlen (str)] ; strcpy (_chArr, str) ;【参考方案3】:不,C++ 字符串不只是字符数组,它们是一个成熟的类,通常除了字符数组提供的功能之外,还有很多额外的东西。 p>
【讨论】:
以上是关于getline(cin,_string);的主要内容,如果未能解决你的问题,请参考以下文章
1050 String Subtraction (20 分)难度: 简单 / 知识点:模拟
使用 getline(cin, string) 时,cin 自动取值,无需询问
getline(cin, string_name) 之前需要 cin.get()
string 类型的输入操作符 cin 和 getline 函数分别如何处理空白字符?