动态分配的字符串的输入和输出数组
Posted
技术标签:
【中文标题】动态分配的字符串的输入和输出数组【英文标题】:Input & output array of strings that are dynamically allocated 【发布时间】:2020-08-23 02:24:32 【问题描述】:基本上,使用动态分配,我想输入5个名字然后打印出来。
代码:
int main()
char* names = new char[5];
string name;
for (int i=0; i<5; i++)
gets(name);
names[i] = name;
for (int i=0; i<5; i++)
cout << names[i] << endl;
delete [] names;
return 0;
它说我无法将字符串转换为 char*。
我要输入的字符串有空格,例如:Bob Smith。
【问题讨论】:
只是为了确保您在不需要时不会让自己变得更难:您有什么理由不只是使用string
的数组吗?还是vector
或string
?
我试过了,但它在 gets(name)
上显示 error: cannot convert ‘std::string aka std::basic_string’ to ‘char*’ for argument ‘1’ to ‘char* gets(char*)
你还在用什么gets
?它已从 C 标准中删除,因为它很危险。
std::gets
需要 char *
(它可以将输入阻塞的缓冲区)。它是 C 的一个向后兼容的遗物。C++ 等价物是使用 std::getline(std::cin, string_array[i]);
或类似的东西。
@JohnFilleau 我猜那是????。
【参考方案1】:
这是您正在尝试做的 C++ 等价物。如果这不能解决您的问题,请告诉我们(例如,教授认为 C++ 只是带有额外内容的 C 的课程)。
#include <iostream>
#include <string>
#include <vector>
constexpr unsigned int NUM_NAMES = 5;
int main()
std::vector<std::string> names;
for (unsigned int i = 0; i < NUM_NAMES; ++i)
std::string name;
std::getline(std::cin, name);
names.push_back(name);
for (const auto & name : names)
std::cout << name << "\n";
return 0;
对此进行了测试并使用以下 I/O 运行:
john smith
BOB VILLA
homer SiMpSoN
Spongebob Squarepants (lives in a pineapple etc etc)
FooBar McBizBaz
john smith
BOB VILLA
homer SiMpSoN
Spongebob Squarepants (lives in a pineapple etc etc)
FooBar McBizBaz
【讨论】:
以上是关于动态分配的字符串的输入和输出数组的主要内容,如果未能解决你的问题,请参考以下文章