【问题标题】:string outputting weird characters字符串输出奇怪的字符
【发布时间】:2021-04-23 17:50:01
【问题描述】:

我有一个函数,它接受一个字符串并将其转换为 ASCII 字符。但是,当我尝试将此输出存储在字符串中时,输出时会出现奇怪的符号,例如:“└└”。

int returnval(char x)
{
    return (int)x - 96;
}

void getWord(string wordRecieved)
{
    cout << wordRecieved << endl;

    for (int i = 0; i < wordRecieved.length(); i++)
    {

        std::string final;

        final = returnval(wordRecieved[i]);

        cout << final;
    }
}

【问题讨论】:

  • 我认为您误解了字符编码的工作原理。如果x 是一个字符,则(int) x 是其编码中的值。如果是 ASCII 字符,x - 96 是它与反引号字符的距离。
  • 我忘了说,这段代码还将 ASCII 转换为字母表中的字母数,例如1 = 一个。因此,a 的 ASCII 码通常为 97,但减去 96 后其值为 1。
  • 'a' 的 ASCII 码 97。通常情况下,但总是如此。从 1 到 26 的数字都用 ASCII 编码不可打印的字符,这就是为什么当您尝试将它们解释为字符时会看到奇怪的东西..
  • final = returnval(...) 从数字生成字符串,但不会从 1 生成 a。你发明了自己的编码,但只实现了一种方式,并假设另一种方式会变魔术
  • 请发minimal reproducible example,包括输入、输出和预期输出

标签: c++ string function symbols


【解决方案1】:

看来你正在做某种加密。我尝试向您建议一个解决方案,但我不确定这是您的愿望。

我建议将来自returnval 的int 返回转换为字符串,并附加到您的字符串final。但这会生成一个字符串,无法区分每个编码字符,因此每个字符后都会添加一个分隔符(空格)。您可以将分隔符更改为您方便的字符。

对你的函数getWord的简单修改:

void getWord(string wordRecieved)
{
    std::string final;
    cout << wordRecieved << endl;

    for (int i = 0; i < wordRecieved.length(); i++)
    {
        final += to_string( returnval(wordRecieved[i]) ) + " ";
    }
    std::cout << final <<std::endl;
}

给出一个输入字符串"abcdefghijklmn",它将打印:

abcdefghijklmn
1 2 3 4 5 6 7 8 9 10 11 12 13 14

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 2018-07-22
    相关资源
    最近更新 更多