【问题标题】:Convert each character in string to ASCII将字符串中的每个字符转换为 ASCII
【发布时间】:2012-03-06 02:39:46
【问题描述】:

谁能告诉我如何轻松地将字符串中的每个字符转换为 ASCII 值,以便我可以对这些值求和? 我需要对哈希函数的值求和。

【问题讨论】:

    标签: c++ string ascii


    【解决方案1】:

    字符串中的每个字符都已经是ascii:

    #include <string>
    int main() {
      int sum = 0;
      std::string str = "aaabbb";
      for (unsigned int i = 0; i < str.size(); i++) {
        sum += str[i];
      }
      return 0;
    }
    

    【讨论】:

    • 除非它当然是 EBCDIC ;) (但你会总结 EBCDIC 值 - 代码仍然运行但给出不同的结果。)
    【解决方案2】:

    要创建哈希,基本上只需要字符串中每个字符的整数值,而不需要 ASCII 值。它们是两个非常不同的东西。 ASCII 是一种编码。您的字符串也可以是 UTF-8 编码的,这仍然意味着您的字符串以单个 NULL 结尾,但每个字符可能占用超过 1 个字节。无论哪种方式,perreal 的解决方案都是您想要的。但是,我将其写为单独的答案,因为您确实需要了解编码和存储类型之间的区别,即 char 是。

    还可能值得一提的是,在 C+11 中,标准库中内置了一个哈希函数。这就是你将如何使用它。

    #include <string>
    #include <iostream>
    #include <functional>
    
    int main() {
      const std::string str = "abcde";
      std::cout << std::hash<std::string>()(str) << std::endl;
      return 0;
    }
    

    最后,你仍然可以在没有 C++11 的情况下使用 std::accumulate 对字符串的元素求和:

    #include <string>
    #include <iostream>
    #include <numeric>
    
    int main() {
      //0x61+0x62+0x63+0x64+0x65=0x1ef=495
      const std::string str = "abcde";
      std::cout << std::accumulate(str.begin(),str.end(),0) << std::endl;
      return 0;
    }
    

    【讨论】:

      【解决方案3】:

      假设您的意思是std::stringchar*,您可以直接对字符求和,它们已经是ASCII 表示形式(与Java 或.net 中的Char 不同)。确保使用足够大的结果类型(至少int)。

      另一方面,C++ 中应该有大量的字符串哈希函数,除非这是一个练习,否则你最好选择其中一个。

      【讨论】:

        【解决方案4】:

        将其转换为 int: 整数(单词[x])

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-09
          相关资源
          最近更新 更多