基本上我的任务是对一堆可变长度的字符串进行排序,忽略大小写。我知道有一个函数 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/