Преобразовать строку в десятичное основание Переполнение стека

Поэтому я должен взять сообщение (msg) и преобразовать его во все числа, используя десятичную базу (A = 65, B = 66 и т. Д.)

До сих пор я взял сообщение и сохранил его как строку, и пытаюсь преобразовать его в десятичную основу с помощью потока строки. Это правильный способ сделать это или есть более простой / более эффективный способ?

Вот что у меня есть:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{

string msg;
int P;
cout << "Enter a something: ";
cin >> P;
cout << "Enter your message: ";
cin.ignore( 256, '\n');
getline( cin, msg );
cout << endl << "Message Reads: " << msg << endl ;

int emsg;                                 // To store converted string
stringstream stream;                      // To perform conversions
stream << msg ;                           // Load the string
stream >> dec >> emsg;                           // Extract the integer
cout << "Integer value: " << emsg << endl;
stream.str("");                           // Empty the contents
stream.clear();                           // Empty the bit flagsreturn 0;
}

Пример выполнения:

Enter a something: 3                     // This is used just to make things go smoothly
Enter your message: This is a message    // The message I would like converted to decimal base

Message Reads: This is a message         // The ascii message as typed above
Integer value: 0                         // I would ultimately like this to be the decimal base message( Ex: 84104105 ...etc.)

0

Решение

Вам не нужно использовать stringstream, это намного проще, просто приведите к unsigned char (если у вас есть символы с отрицательной кодировкой), а затем к int.

cout << "Integer value: ";
for (size_t i = 0 ; i < msg.size(); ++i)
cout << static_cast<int>(static_cast<unsigned char>(msg[i]));
cout << "\n";

Каждый символ кодируется целым числом, которое просто является целым числом, которое вы хотите. Таким образом, вы можете сделать преобразование с простым приведением.

0

Другие решения

Если вы хотите преобразовать каждый символ в строке в его эквивалент ASCII (что, как вам кажется), то вам нужно перебрать строку и просто взять каждый символ как число.

Если у вас есть компилятор, который имеет Диапазон на основе for петли тогда просто делай

for (const char& ch : msg)
{
std::cout << "Character '" << ch << "' is the same as "<< static_cast<int>(ch) << '\n';
}

Если у вас более старый компилятор, используйте обычные итераторы:

for (std::string::const_iterator itr = msg.begin();
itr != msg.end();
++itr)
{
std::cout << "Character '" << *itr << "' is the same as "<< static_cast<int>(*itr) << '\n';
}
1

По вопросам рекламы [email protected]