【问题标题】:Converting char letters to numbers in C++?在 C++ 中将 char 字母转换为数字?
【发布时间】:2012-03-31 17:21:48
【问题描述】:

我是一个 C++ 新手(我相信你会知道的),我想我会尝试编写一些加密程序,将输入转换为文件中的数字。

我做了一个表格,每个字母都有自己的编号。每个字母的代码本身有点像这样:

    if (Letter = "P")
{
    FILEO.open("Encrypted.txt", ios::app);
    FILEO << " 259";
    FILEO.close();
}

它提出了“无法从 'const char [2]' 转换为 'char'”

谁能建议我如何从一封信中实际获取一个数字? 提前问候

【问题讨论】:

  • Letter的数据类型是什么?是字符串,还是字符数组?
  • 我猜Letterchar。使用双引号可以生成字符串文字。要仅表示字符 P,请使用单引号 'P'。另外,你是真的想设置Letter=),还是检查它的值(==)?
  • 并回答您的下一个问题“为什么我的程序这么慢?”:不要打开和关闭每个字母的输出文件。 :)

标签: c++ encryption hex decimal


【解决方案1】:

您不能将 C++ 字符与 C++ 字符串进行比较!您应该对字符使用单引号,而不是双引号。此外,C++ 等于运算符不是 =,而是 ==。单个 = 是赋值运算符。

你应该这样写条件:

if (Letter == 'P')
{
    FILEO.open("Encrypted.txt", ios::app);
    FILEO << " 259";
    FILEO.close();
}

【讨论】:

    【解决方案2】:

    您的条件检查是错误的。它应该是==,而不是=。单个= 表示赋值,而== 表示条件检查。

    我假设Letter 是一个字符数组。在这种情况下,您可以使用strcmp 将其与P 进行比较。

    if(strcmp(Letter, "P") == 0)
    {
        // rest of the code
    }
    

    如有必要,请查看strcmp 函数参考here

    如果Letter 只是一个char,那么你需要像这样将它与P 进行比较 -

    if(Letter == 'P')
    {
        // rest of the code
    }
    

    字符周围的单引号使其成为字符文字,然后可以使用 == 将其与另一个字符进行比较。

    【讨论】:

      【解决方案3】:

      我建议您在向我们提供错误消息时,向我们提供完整的消息 - 包括行号,以便我们知道错误发生的位置(或告诉我们错误发生在哪一行发生在)。注意这些行号可以极大地帮助找到真正的问题。

      鉴于错误消息,我假设 Letter 是 char 类型 - 您需要了解文字字符串(用双引号括起来)和文字字符(用单引号括起来)之间的区别。

      正如 Luchian 还提到的,你有一个赋值而不是一个相等测试 - 与 Visual Basic 不同,如果这是你来自的地方,那么两者有不同的符号。

      因此应该是:

      if (Letter == 'P') 
      

      【讨论】:

        【解决方案4】:

        如果 Letter 是 char,则使用 char 文字:

        if (Letter == 'P')
        ...
        

        【讨论】:

          【解决方案5】:

          你需要使用strcmp来比较......因为=是一个赋值运算符......

          【讨论】:

            【解决方案6】:
            (Letter = "P")
            

            这是一个分配,而不是比较。

            你的意思可能是(Letter == "P"),这也是错误的,你需要strcmp

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-04-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-07
              相关资源
              最近更新 更多