繁体   English   中英

“二进制表达式的无效操作数”错误?

[英]“invalid operands to binary expression” error?

C++ 新手在这里,基本上我试图根据用户输入打印出随机字符列表。 我知道我的错误涉及“m <= num”语句,但不确定如何解决该问题。 还是我完全错了? 非常感谢您的解释!

注意我的逻辑是'm'是字符列表,所以对于'num',我试图根据'num'的值打印出一个字符列表。 例如,如果用户为列表选择 2,为元素选择 5,我希望 output 为.... 列表 1:“wtwef”列表 2:“wopoe”

#include <iostream>
#include <string>
#include <vector>
#include <list>
using namespace std;


int main() {
  srand (time(NULL));
  int L;

  string alpha = "abcdefghijklmnopqrstuvwxyz";
  list<string> m;

  cout << "Give the number of lists: ";
  cin >> L;

  for (int i = 1; i <= L; i++){
    cout << "Give the number of elements for list " << L << " : "<< endl;
    int num; cin >> num;

    for (int k = 0; m <= num; k++){
      cout << alpha[rand() %100] << " " << endl;
      m.push_back(alpha[rand() %100]);

}

  cout << "Give a word: " << endl;
  cin >> s;

  }

表达式“m <= num”的问题是因为 m 是 std::list 类型,而 num 是 int 类型。 将列表与 int 进行比较是没有意义的,这在现实世界中相当于将购物清单与 4 进行比较,只是没有任何意义。 您可能打算使用“k <= num”。

cin >> s行也是一个错误,s 没有定义。

您还有一行m.push_back(alpha[rand() % 100]); 这将是一个错误,m 具有一种字符串,而在 alpha 上使用 [] 运算符将返回一个字符,请参阅下面的代码以获取解决方案。

您在两个地方使用模数运算符,您在其中 mod by 100。如果您想要一个随机索引处的字符,在这种情况下,您应该执行alpha.substr((double) rand() / RAND_MAX * alpha.length(), 1) . 请注意,RAND_MAX 是一个应该预定义的常量,您不需要设置它。 我有一种感觉,你试图在内部循环中完成的是:

    string randomCharacter = alpha.substr((double) rand() / RAND_MAX * alpha.length(), 1)
    cout << randomCharacter << " " << endl;
    m.push_back(randomCharacter);

您还在某处的代码中缺少左大括号(可能是由于复制粘贴),这将是它无法编译的另一个原因。

如果您想要的是能够在终端中输入多少个随机字符序列,然后是每个序列中有多少个字符,您可能需要重新编写内部循环,如下所示:

    string randomCharacters = "";
    for (int k = 0; k <= num; k++){
        string randomLetter = alpha.substr((double) rand() / RAND_MAX * alpha.length(), 1);
        cout << randomLetter << " " << endl;
        randomCharacters += randomLetter;
    }
    m.push_back(randomCharacters);

这将使用由数组 alpha 中的随机字符填充的字符串填充列表,您可以稍后使用。 如果您不想看到打印到终端的所有字符,则可以删除 cout,因为它们是随机选择的。

编辑问题后:解决方案应如下所示:

    srand(time(NULL));
    int L;

    string alpha = "abcdefghijklmnopqrstuvwxyz";
    vector<string> m;

    cout << "Give the number of lists: ";
    cin >> L;


    cout << "Give the number of elements for the lists: ";
    int num; 
    cin >> num;
    cout << endl;
    for (int i = 1; i <= L; i++){

        string randomCharacters = "";
        for (int k = 0; k < num; k++){
            string randomLetter = alpha.substr((double) rand() / RAND_MAX * alpha.length(), 1);
            randomCharacters += randomLetter;
        }
        m.push_back(randomCharacters);
    }
    for(int i = 0; i < m.size(); i++)
    {
        cout << "list" << (i+1)<< ": " << m[i] << endl;
    }

请注意,此解决方案切换了矢量列表,因为在这种情况下它更简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM