[英]“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.