动态分配的字符串的输入和输出数组

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 的数组吗?还是vectorstring 我试过了,但它在 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

【讨论】:

以上是关于动态分配的字符串的输入和输出数组的主要内容,如果未能解决你的问题,请参考以下文章

动态分配输入,并在C ++中输出2-D数组

c语言 动态数组

动态数组分配仅返回所有索引中的最后一个元素 C

如何正确地为字符串“数组”动态分配内存

通过动态分配创建数组后,在C中通过realloc改变内存大小时出现问题

如何在给定位置从动态分配的数组中打印字符串