2012-04-22 12 views
1

は、これまでの私のコードです:C++で文字列を整数に変換する方法は?ここ

#include "stdafx.h" 
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
string exp; 
cout << "Enter a number and raise it to a power" << endl; 
cin >> exp; 
int num = exp[0]; 
int pow = exp[2]; 

cin.get(); 
cin.ignore(256,'\n'); 
} 

は基本的に、私はあなたが「^ 5 2」のようなものを入力することができますし、それはあなたのためにそれを解決するプログラムを作成しようとしています。今のところ、私は文字列の最初と3番目の値を取り、それらを "num"と "pow"と呼んでいます。 (番号、パワー)「cout < < num;」のようなものを試してみると、小数のAscii値を返します。それを10進数に変換するにはどうしたらいいですか?

答えて

1
int num; 
    char op; 
    int pow; 
    if ((std::cin >> num >> op >> pow) && op == '^') { 
      // do anything with num and pow 
    } 
6

あなたは、整数の変数に直接cinから読み取ることができます。

int n; 
std::cin >> n; 

をしかし、あなたは自然にそのように見ている式を入力することはできません。

あなたがstd::stringstreamを使用することができます2^5読むには:

int pos = exp.find('^'); 
int n; 
std::stringstream ss; 
if(pos != std::npos){ 
    ss << exp.substr(0, pos); 
    ss >> n; 
} 

及び第2の可変についても同様。

このメソッドはBoostでboost::lexical_castとして実装されています。

さらに複雑な表現にはパーサーを構築する必要があります。このテーマについて詳しく読むことをお勧めします。

+0

または 'のstd :: STOI()'関数を使用: 'N =のstd :: STOI(exp.substr(0、POS));何' atoi'約 ' – bames53

0

あなたの数字はすべて10未満です。この場合はexp[0]-'0'exp[1]-'0'で十分です。

2

strtolはこれで非常に良好です。可能な限り多くの数字を読み取り、数字を返します。また、その文字を停止させる原因となった文字を指します(あなたの場合は'^'となります)。

+0

か? – Alcott

+0

@Alcott: 'atoi'はあなたに最初の2つしか与えませんが、エラーの報告は一切ありません。 –

関連する問題