【问题标题】:Use an array declared inside an if condition elsewhere使用在其他地方的 if 条件内声明的数组
【发布时间】:2021-04-17 06:36:49
【问题描述】:

我根据随机生成的数字声明了一个数组。现在我知道我们不能在其他任何地方使用在 if 块中生成的数组,但我听说有动态内存分配和向量等方法? 有什么帮助吗?

    srand(time(0));
int num=rand() % 6 + 1;

if(num==1)
char word[6] = {'b','a','t','m','a','n'};

if(num==2)
char word[6]={'k','i','l','l','e','r'};

if(num==3)
char word[6]={'b','e','a','u','t','y'};

【问题讨论】:

  • 使用头文件中声明的向量,然后重新分配它并在任何你喜欢的地方使用它
  • 这是 C++。为什么不std::string?或者至少std::vector?请记住,“字符数组”只是一个“字符串”。也许您真正需要的是std::vector<std::string>,然后您可以添加三个(或N 个)条目。您在这里要描述的是一个查找表,例如 words[n] 是单词,其中 n 在 0 到 2 的范围内。
  • 对于随机数,请尝试使用像 std::uniform_int_distribution 这样的好工具,而不是像 rand(time(NULL)) 这样的垃圾工具,这可能会产生巨大的意外后果
  • 附注:rand 和模不会产生良好的分布。像这里一样玩一下就可以了——如果你有更强的要求,你可以使用rand() * desired_max / RAND_MAX获得更好的结果——不过,请注意可能的溢出(只是为了将来记住)。
  • "有什么帮助吗?"不是可接受的问题陈述。你的书肯定会教你动态分配。做一些研究,看看你想出了什么!

标签: c++ arrays loops


【解决方案1】:
srand(time(0));
int num=rand() % 6 + 1;

std::array <char, 6> word;

if (num == 1)
    word = {'b','a','t','m','a','n'};
else if (num == 2)
    word = {'k','i','l','l','e','r'};
else if (num == 3)
    word = {'b','e','a','u','t','y'};

【讨论】:

    【解决方案2】:

    一种方法:

    srand(time(0));
    int num=rand() % 6 + 1;
    
    vector <char> word;
    
    if (num == 1)
        word = {'b','a','t','m','a','n'};
    
    if (num == 2)
        word = {'k','i','l','l','e','r'};
    
    if (num == 3)
        word = {'b','e','a','u','t','y'};
    

    或者使用std::string

    srand(time(0));
    int num=rand() % 6 + 1;
    
    string word;
    
    if (num == 1)
        word = "batman";
    
    if (num == 2)
        word = "killer";
    
    if (num == 3)
        word = "beauty";
    

    【讨论】:

    • 在这里使用 std::string 肯定是更好的方法。
    • @LeontyevGeorgiy 是的,我也在编辑我的答案
    • @LeontyevGeorgiy 这个问题和它的标题对于想要一个数组非常具体。我们必须假设字符数组的例子只是一个例子。
    • @LeontyevGeorgiy 取决于一个人想要做什么......对于文本的表示 - 绝对。如果存储任意数据,特别是如果它可能包含空值,则向量是更好的选择——或者其他答案的std::array,如果我们想避免动态分配。
    • @Aconcagua 好吧,也许吧。不过,如果出现这样的问题,我怀疑这不仅仅是学校的任务。这些通常至少在初学者级别上没有“任意数据”要求。如果 TC 不是初学者,根本不会问这样的问题。
    【解决方案3】:

    根据您的展示,您可能会使用:

    srand(time(0)); // Called only once, probably in main
    
    char words[3][6] { // Possibly const // Possibly std::vector<std::string>
        {'b','a','t','m','a','n'},
        {'k','i','l','l','e','r'},
        {'b','e','a','u','t','y'}
    };
    
    int num = rand() % 3;
    auto& word = words[num]; // char (&word)[6] = words[num];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-17
      • 2013-11-17
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多