解决问题:StringVariable [position](在本例中为Word [e])输出一个定义为char变量类型的值,而不是我预期的字符串变量类型。谢谢大家的帮助!
当我运行Hangman游戏时,我收到以下错误:
错误2错误C2678:binary'!=':找不到运算符,它接受类型为'std :: string'的左手操作数(或者没有可接受的转换)
错误1错误C2678:二进制'==':找不到运算符,它接受类型为'std :: string'的左手操作数(或者没有可接受的转换)
4智能感知:没有操作符“!=”匹配这些操作数
3智能感知:没有运算符“==”匹配这些操作数
我在代码中注释了此错误指向并复制到与问题相关的函数中。然后在main()函数中运行这些函数以简化代码。
代码的这一部分用于检查猜测是否等于单词中的字母。如果我需要提供进一步的解释,请告诉我。
相关代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
//Functions
void GrabWord();
void DiscoverLet();
void guess();
//Variables
int NumL, Fl, F, count[10];
string G, Word;
//Grab Word from .txt and define NumL
void GrabWord()
{
//Grab Random Line from .txt
//Random Line >> Larray
Word = "short";
NumL = Word.size();
}
//Checks if Guess matches any letters
void DiscoverLet()
{
for(int e = 0; e < NumL; e++)
{
//Error Points to the following two comparisons
if(G == Word[e])
{
count[e] = 1;
}
else if(G != Word[e])
{
Fl++;
}
else
{
cout << "Error: DiscoverLet(), G to Word[]\n";
}
}
if(Fl == NumL)
{
F = F + 1;
}
Fl = 0;
}
答案 0 :(得分:2)
您正在寻找的正确字符串比较称为find:
if(Word.find(G) > std::string::npos)
{
count[e] = 1;
}
else
{
Fl++;
}
你的比较不起作用的原因是你的Word [e]抓取了一个character
的字符串,并将其与一个string
变量进行比较。
根据您的代码判断,您希望计算字母出现在字符串中的次数。如果你想计算字母出现在字符串中的次数,那么你可以使用这样的find函数:
int count = 0;
int foundIdx = 0;
for(int i = 0; i < NumL; i++)
{
foundIdx = Word.find(G, foundIdx+1);
if (foundIdx == std::string::npos)
{
break;
}
count++;
}
答案 1 :(得分:1)
if(G == Word[e])
...
else if(G != Word[e])
在这些比较中,G
是string
而Word[e]
是string
中的字符。没有操作员可以进行相应的比较。
答案 2 :(得分:1)
G是string类型的变量。 Word也是一种字符串。因此,您可能已经知道字符串只是字符数组。所以Word [e]指向Word字符串的字符。所以
if(G == Word[e])
在这里,您要将字符串与字符进行比较。但是C ++不知道该怎么做!我的意思是C ++不知道如何评估表达式。因为运算符==用于比较字符串和字符串不会在字符串类中重载。线路
也是如此if(G != Word[e])
如果你试图找出G字符串中是否出现Word [e]字符,你应该运行另一个循环搜索字符串G的字符。或者你可以使用find函数。
答案 3 :(得分:0)
错误的原因是因为您要将字符串与字符进行比较。您可以在字符上使用==,!=,&gt;,&lt;等等,但肯定不是字符串。而且,字符串G似乎是空的。如果我错了,希望这有助于纠正我!快乐的编码!
答案 4 :(得分:0)
G
为string
类型,但Word[e]
为char
类型。您应该将Word[e]
转换为String
以与G
std::to_string
进行比较,或将string::find
方法与G
一起使用,以查找内容Word[e]
在G
。
答案 5 :(得分:0)
比较不会那样。您需要了解char
和std::string
之间的区别。类型char
的变量表示单个字母。 char
不能是多个字符,也不能为空。严格来说是一个字母。没什么,仅此而已。
可以将std::string
视为char
的托管数组。它的大小可以是0到非常大。此类型公开数组访问运算符[n]
,该运算符从位置n
的字符串返回一个字符。它的返回类型是char
。
由于G
应该是用户的输入信,我建议您将G
声明为char
。事实上,它将解决您的问题。
无法将字符串与单个字符进行比较的原因。字符串被设计为与另一个整个字符串相当。一个角色可以与另一个积分进行比较,或者说它更简单,另一个角色。因此,如果您将G
的类型更改为char
,您的比较将按预期工作。