Установить определенную букву в строке, равную int + ","

В настоящее время я пишу функцию для замены букв в строке на соответствующее число плюс ",". Мой текущий код:

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 ответ

Решение

Я думаю, что вы пытаетесь достичь это:

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 естественно упорядочены и смежны.
  • Вы можете добавить защиту для не буквенных символов, например, цифры и большинство знаков препинания будут возвращать отрицательные индексы
Другие вопросы по тегам