【问题标题】:checking for character pair in array检查数组中的字符对
【发布时间】:2019-11-06 16:10:44
【问题描述】:

我有一个字符数组,它会在用户输入的长度内生成一个随机的小写字母数组。我的问题是,在生成随机字母数组后,用户输入了一对字符(两个字母),我的代码应该检查该对是否在生成的随机数组中。它只检查一封信时工作正常,但当我介绍第二封信时它不起作用。我将不胜感激。

#include <ctime>
#include <iostream>
#include <cstdlib>

int main() {
    std::srand(std::time(NULL));
    int i, num;
    char letter1, letter2, ch, r;
    const char chars[]="abcdefghijklmnopqrstuvwxyz";


    std::cout << "How many letters do you want in your string? ";
    std::cin >> num;

    for (i=0; i<num; i++)
    {
        ch = chars[rand()%26];
        std::cout << ch;
    }

    std::cout << "\nWhat letter pair would you like to find? ";
    std::cin >> letter1 >> letter2;


    if ((chars[i] == letter1) && (chars[i+1]==letter2))
        std::cout << "It is in your string. ";
    else
        std::cout << "You do not have " << letter1 << letter2 << " in your string";
}

【问题讨论】:

  • 如果您在随机生成的字符串之前输入了您想要查找的字母对,则不必存储随机生成的字符串。但是,是的,不存储随机生成的字符串(您只需继续覆盖 ch 这是一个字母)永远不会产生解决方案。您已经掌握了一些基础知识,但是您还缺少一个循环来检查字母对,并且您的 chars[i+1] 可能会超出范围并导致未定义的行为。如果不给出您(家庭作业?)问题的完整答案,就很难知道从哪里开始提供帮助。
  • 您需要先将随机字符串存储在某处,然后才能对其进行检查。目前您正在检查您的“a-z”字符串,而不是检查随机生成的字符串!
  • 如果在“生成”随机字符串之前读取并存储了letter1letter2,则不需要存储随机字符串。

标签: c++ arrays char


【解决方案1】:

首先,您没有存储随机生成的字符

for (i=0; i<num; i++)
{
    ch = chars[rand()%26];
    std::cout << ch;
}

这只是在 ch 中写入一个随机字符,并在每次迭代时将其显示在控制台上。您不存储数据, ch 仅包含循环结束后的最后一个随机字符,其他所有内容都会丢失。

你要搜索的部分是双重错误的。

if ((chars[i] == letter1) && (chars[i+1]==letter2))
    std::cout << "It is in your string. ";
else
    std::cout << "You do not have " << letter1 << letter2 << " in your string";
  1. 这不在循环内,i 总是会是 num-1。
  2. 您正在检查的数组是 chars,它是您的 const 数组,其中包含“abcdefghijklmnopqrstuvwxyz”。这不包含您随机生成的字符。

【讨论】:

  • 这不是一个真正的答案:它更像是一个(有效的)批评,但不应该作为答案发布。
  • @Sebastian 我准确地指出了问题所在以及原因。您不必为某人编写代码来回答他们的问题。
  • 因为除了“我会很感激任何帮助”之外没有其他实际问题。在我看来这是一个有效的答案。
  • 我并不是想学究气,但这不符合 SO 答案的条件,不应发布在答案部分。几天前我自己也犯了同样的错误。答案将为问题提供答案,而不仅仅是当前实施失败的原因。
  • @Sebastian 我建议你看看stackoverflow.com/help/how-to-answer。 “任何让提问者朝着正确方向前进的答案都是有帮助的”。这也很清楚地表明,答案并不总是必须为问题提供完整的工作解决方案才能成为答案。答案只是应该回答问题。在这种情况下,问题是寻求帮助,说明为什么他的程序没有做它应该做的事情。我认为这个答案提供了这一点。
猜你喜欢
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多