在字符串中设置一个等于int +“,”的字母

时间:2014-02-15 07:17:18

标签: c++ string-substitution

我正在编写一个函数来替换一行中带有相应数字加上“,”的字母。我目前的代码是:

std::string letterToNumber(std::string message) {
  std::string::iterator iter;
  toUpper(message);

  for (iter = message.begin(); iter != message.end(); ++iter) {
    for (int i = 0; i < alphabetSize; ++i) {
      if (*iter == alphabet[i]) {
        // Problem here
      }
    }
  }

  return message;
}

(toUpper是我自己的功能)。我不太确定如何将字符串中的当前字母分配给数字+逗号。起初我尝试只为特定的字母分配一个数字,但我意识到我需要一个分隔符,所以我决定使用一个逗号。

1 个答案:

答案 0 :(得分:1)

我想你想要达到的目的是:

std::string letterToNumber(std::string input) {
  toUpper(input);
  std::stringstream output;

  std::string::iterator it;
  for (it = input.begin(); it != input.end(); ++it) {
      if (input.begin() != it) {
        output << ",";
      }
      int letterIndex = static_cast<int>(*it) - 'A';
      output << letterIndex;
  }

  return output.str();
}
  • 构建新字符串而不是尝试编辑现有字符串看起来更简单,更有效,因为自字母(1个字符)映射到多个字符时,您的初始字符串将需要几个低效的副本和重新分配。
  • 要将字符转换为索引,您可以使用ASCII字符自然排序且连续的事实。
  • 您可以为非字母字符添加保护,例如数字和大多数标点符号将返回负数索引