-2

这是我现在拥有的代码:

 int main() {
    char stupac1, stupac2;
    for (stupac1 = 'A'; stupac1 <= 'Z'; ++stupac1)
    {
        for (stupac2 = 'a'; stupac2 <= 'z'; ++stupac2)
              // between the caps and the non caps there are 32 letters (ASCII code)
              if(strcmp (reinterpret_cast <const char*> (stupac1),
                         reinterpret_cast <const char*> (stupac2)) == 32 )
              { 
                  cout <<stupac1 << stupac2 << endl;
              }
              else
              {
                  cout << "These letters suck" << endl;
              }
    }
    return 0;
}

任务:我需要编写一个包含 2 个连续循环的程序,该程序将生成一个表格,其中 AZ 和 az 位于 2 列中。

我需要使用for,但strcmp如果没有必要可以删除。我正在尝试一些东西,但是当我运行此代码并且它崩溃时没有打印任何内容。

4

3 回答 3

2

在 C++ 中,字符 ( char) 就像 一样是标量值int,而不是字符串。例如'A'等于 65,假设是 ASCII/Unicode 系统。要测试是否相等,请使用==运算符。

在 ASCII 中从 A 到 Z “计数”非常容易,但并非所有 C++ 实现都是 ASCII。对于您的老师的奖励积分,请指出该程序不会在EBCDIC下运行。

此外,在太习惯于char *字符串之前,请注意真正的 C++ 程序几乎只使用std::string,它也使用==运算符进行比较。

于 2012-06-28T12:01:30.493 回答
1
strcmp (reinterpret_cast <const char*> (stupac1), reinterpret_cast <const char*>(stupac2))

这会调用未定义的行为,因为参数strcmp应该是空终止的字符串,但您传递的不是空终止的。

由于尚不清楚您要做什么,因此我不会提出替代且正确的解决方案。

于 2012-06-28T11:57:51.427 回答
0

Single chars 就像 s 的较小版本int,因此您可以比较它们或减去它们的值,就像ints 一样。

您的测试的一个更简单的版本是

if (stupac2 - stupac1 == 32)

看,轻松多了。:-)

每当您似乎需要reinterpret_cast时,您都可能以错误的方式尝试事情。

于 2012-06-28T12:54:27.740 回答