C++初心者です。既にライブラリにあるファンクション(atoiやstoi)を使わずに文字列Stringを数値intに変換するプログラムを作りたいです。
期待する結果:例えばユーザーがStringで8967と入力した場合にintの8967をプリントしたいのです。
実際に実行すると
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string
このように表示されてしまいます。
このコードは自分なりに通常のループを使ったパターンと回帰のパターンを書きました。よろしければアドバイスをください。
c++
1#include <iostream> 2#include <ctime> 3 4using namespace std; 5 6int toInteger(string num, int n, int x, int numInInteger){ 7 int count=num.length()-1; 8 9 //base case 10 if(num.length()==0) 11 return 0; 12 13 //keep doing if the length is not zero 14 while(count>=0){ 15 numInInteger = numInInteger*n+(num.at(x)-'0'); 16 count--; 17 //move position from right to left, and increase n by 10 times 18 toInteger(num, n=n*10, x-1, numInInteger); 19 } 20 return numInInteger; 21 22} 23 24int toIntegerIterative(string num, int numInInteger){ 25 26 //keep doing until the length of string 27 for(int i=0; i<num.length(); i++) 28 numInInteger = numInInteger*10+(num.at(i)-'0'); 29 return numInInteger; 30} 31 32int main(){ 33 //define variables 34 string num; 35 36 //ask user to enter a string 37 cout << "Enter an integer number" <<endl; 38 cin >> num; 39 40 int n=1; 41 int x=num.at(num.length()-1); 42 int numInInteger=0; 43 44 //call functions 45 toInteger(num,n,x,numInInteger); 46 //print result 47 cout << "The result is " << numInInteger <<endl; 48 49 toIntegerIterative(num,numInInteger); 50 //print result 51 cout << "The result is " << numInInteger <<endl; 52 53 return 0; 54}
二つの関数を、『numに文字列を代入すると、numInIntegerに数値を入れる』という働きにしたいということでしょうか?
"思うように"って何よ。期待する結果と実際の結果を記しなさい。
質問を修正しました。
この場合戻り値をそのまま返す方が簡単かと思いますが、引数を書き換える形式にしたいのはなぜですか。
で、実際にはどうなっちゃうの? 僕とこでは変換ルーチン呼ぶ前に停止しちゃったよ?
現在大学1年生でプログラミングを学んでおり、中間テストに備えて練習問題を解いています。これはその練習問題の1つなのですが、海外の大学で教授が質問を受け付けてくれないためこちらでアドバイスをお願いしました。
そんな事情は訊いてない。これコンパイル/実行したらどんな結果が得られるか? と訊いてる。
1つ前の回答は別の方への返信でしたのであなたに対してではありません。実行した際の結果を質問欄に追加しました。
了解...でもこれじゃ書き換わってないぞ? main側で呼んだあとprintしてみ?
ご指摘いただいた部分のコードを訂正しました!mainからprintした方がいいですか?教えていただいたことを理解できていなかったらすみません。
だからー、main() で 各toIntegerXXX()を呼んだ直後にnumInIntegerをprintしてみ?
分かりました!何度もすみません!
回答4件
あなたの回答
tips
プレビュー