当我开始编写这段代码时,我遇到了字符串和switch语句的问题,这就是为什么我不确定我是否正确地绕过了这个问题。最主要的问题是程序只打印图表的答案而不打印字符串的答案。也许这是因为使用了错误的“if”。下面是我的代码:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::string;
using namespace std;
constexpr long long string_hash(const char *s) {
long long hash{}, c{};
for (auto p = s; *p; ++p, ++c) {
hash += *p << c;
}
return hash; } constexpr long long operator"" _sh(const char *s, size_t) {
return string_hash(s); }
int main() {
cout << "Ievadiet atzimi ar burtiem (A, B, C, D, F) ==> ";
string atzime;
char burts;
double atzime_sk, pluss, minuss;
cin >> atzime;
burts = atzime[0];
switch(burts)
{
case 'A':
atzime_sk = 4;
cout << "Tava atzime ir ==> " << atzime_sk;
break;
case 'B':
atzime_sk = 3;
cout << "Tava atzime ir ==> " << atzime_sk;
break;
case 'C':
atzime_sk = 2;
cout << "Tava atzime ir ==> " << atzime_sk;
break;
case 'D':
atzime_sk = 1;
cout << "Tava atzime ir ==> " << atzime_sk;
break;
case 'F':
atzime_sk = 0;
cout << "Tava atzime ir ==> " << atzime_sk;
break;
default:
break;
}
if (atzime[1] == '-' || '+')
{
switch (string_hash(atzime.c_str()))
{
case "+"_sh:
pluss = atzime_sk + 0.3;
cout << "Tava atzime ir ==> " << atzime_sk;
break;
case "-"_sh:
minuss = atzime_sk - 0.3;
cout << "Tava atzime ir ==> " << atzime_sk;
break;
default:
break;
}
}
}
if (atzime[1] == '-' || '+')
并不像你想象的那样。