1

メッセージ (msg) を取得し、10 進法 (A=65、B=66 など) を使用してすべての数値に変換します。

これまでのところ、メッセージを取得して文字列として保存し、文字列ストリームを使用してそれを 10 進数に変換しようとしています。これはこれを行う正しい方法ですか、それともより簡単で効率的な方法はありますか?

ここに私が持っているものがあります:

#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 flags


return 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.)
4

2 に答える 2

1

文字列内のすべての文字を対応する 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';
}
于 2013-09-02T09:28:29.203 に答える