c++ - 有没有一种方法可以使用 cin.getline() 而不必事先定义 char 数组大小?

标签 c++ string cstring getline

基本上我的任务是对一堆可变长度的字符串进行排序,忽略大小写。我知道有一个函数 strcasecmp() 比较 cstrings,但不适用于字符串。现在我正在对字符串使用 getline(),这样我就可以一次读入一行字符串。我将它们添加到一个字符串 vector 中,然后在每次调用 strcasecmp() 时转换为 cstring。在与 strcasecmp() 比较之前不必将每个字符串转换为 cstring,我想知道是否有一种方法可以在没有预定义 char 数组大小的情况下将 cin.getline() 用于 cstring。或者,最好的解决方案是只读取字符串、转换为 cstring、存储在 vector 中,然后排序吗?

最佳答案

我假设“转换为 cstring”是指使用字符串的 c_str() 成员。如果是这样的话,在大多数实现中这并不是真正的转换,它只是一个访问器。仅当您担心性能(听起来像您)时,差异才重要。在内部,std::strings(几乎总是,但技术上不必)表示为“cstring”。该类负责为您管理它的大小,但它只是下面动态分配的 cstring。

所以,直接回答:使用cin.getline时必须指定数组的大小。如果不想指定大小,则使用 getline 和 std::string。这种方法没有任何问题。

关于c++ - 有没有一种方法可以使用 cin.getline() 而不必事先定义 char 数组大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2569662/

相关文章:

C++11:确保一次写入多次读取的定义语义?

c++ - 是否可以在多个 gpus 上运行 cuda 内核

C++ 优先级队列不遵守 FIFO 顺序

c++ - 友元函数类内定义只允许在非本地类定义中使用。这是什么意思?

c# - 查找子字符串的开始索引和结束索引

C字符串连接问题函数

java - 如何从多个下划线可变大小的字符串中获取所需的字符?

php - 如何通过多个定界符分解字符串并保留定界符?

C++删除c字符串数组/其他类型的数组

c++ - 将笨拙的 cstring 拆分成不同的数组?