所以我一直在寻找如何将字符串转换为short并找到很多关于如何将字符串转换为整数的方法.我会留下一个问题作为对这些主题的评论,但我没有足够的声誉.所以,我想要做的是将字符串转换为short,因为数字应该永远不会超过三或零以下并且短路会节省内存(据我所知).
要清楚,我不是指ASCII码.
我希望能够做的另一件事是检查字符串到short的转换是否失败,因为我将使用由用户输入组成的字符串.
我知道我可以使用while循环来实现这一点,但是如果有一个内置函数在C++中执行此操作,那将与while循环一样或更高效,我很乐意听到它.
我知道你可以通过使用#标签在YAML中发表单行注释,但是我无法/*在java中找到类似于启动注释的内容并且必须用a完成*/.YAML中是否存在这样的运营商?
所以我创建了自己的函数来比较两个C字符串:
bool list::compareString(const char array1[], const char array2[])
{
unsigned char count;
for (count = 0; array1[count] != '\0' && array2[count] != '\0' && (array1[count] == array2[count] || array1[count + 32] == array2[count] || array1[count] == array2[count+32]); count++);
if (array1[count] == '\0' && array2[count] == '\0')
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
我的for循环的参数非常长,因为它将计数带到至少一个字符串的末尾,并char以这样的方式比较每个数组中的每个字符串它们的情况无关紧要(将32添加到大写字母char转为char进入小写的对应部分).
现在,我猜这是比较两个C字符串的最有效方法,但由于它的长度,for循环难以阅读.我被告知的是尽可能使用for循环而不是while循环,因为for循环在其起始参数中具有起始,结束和递增条件,但为此,这似乎可能不适用.
我要问的是,我应该如何格式化这个循环,是否有更有效的方法呢?
我有一个游戏,我想计算一个玩摇滚纸剪刀的玩家对计算机的输赢(C++的随机数函数).为了跟踪玩家的胜利,损失以及与计算机的关系,我创建了这个结构(这是全局的):
struct human{
short wins = 0;
short losses = 0;
short ties = 0;
};
Run Code Online (Sandbox Code Playgroud)
当我尝试使用short结构中的一个变量进行数学运算时会出现问题:
int main(){
short totalPlays = 1;
float winsPerc;
outcome(totalPlays, winsPerc);
}
void outcome(short totalPlays, float& winsPerc){
winsPerc = (static_cast<float>(human.wins) / static_cast<float>(totalPlays))* 100;
}
Run Code Online (Sandbox Code Playgroud)
在这两个函数中,我试图计算玩家获胜的百分比.但是,我的编译器似乎human将human.wins变量的一部分解释为一个类型.所以当然我试图改变human.wins到short human.wins无济于事.之后,编译器只表示类型short是意外的.由于这是如此模糊,我真的不知道我做错了什么.任何帮助将非常感谢!
我完全不知道为什么我的编译器抛出这个错误:"错误1错误C2106:'=':左操作数必须是l值"这行代码:
while ((input != 1 && input != 2 && input != 3 && choice = 1) ||
(input != 1 && input != 2 && input != 3 && input != 4 && input != 5 && input != 6 && choice = 1) ||
std::cin.fail()){}
Run Code Online (Sandbox Code Playgroud)
想要的错误似乎input很短,可以修改,但!=不是修饰符,它是一个检查器.到底是怎么回事?