ページ 11

stringからintへの代入

Posted: 2011年9月05日(月) 01:14
by Cr
Crです。
Stringからintへの代入について質問です。

コード:

string str;
str = "J2"
int n;
n = str.at(1);
strは本当はユーザーからの読み取りでアルファベット一文字、数字一文字を読み取ります。
このとき、アルファベット一文字と数字一文字、またはアルファベット一文字のみ
の二つの可能性があるので読み取りの段階で区別することは不可能です。
で、数字があると分かったとき(今は判定は除いています)数字だけをint型のnに代入したいのですが…
これだと文字コードが代入されますよね
で、atoi()を使おうかと思ったのですがこれはC用ですよね
更に、Cでstringを使うには.c_strが必要ですよね
ですが今.at(1)がもうすでについている状態なんです。

この場合はどうやれば二文字目だけをnに代入できるのでしょうか?

Re: stringからintへの代入

Posted: 2011年9月05日(月) 01:25
by Cr
自分で読み返した時に違和感が来たので訂正します。
更に、Cでstringを使うには.c_strが必要ですよね
どう頑張ってもC言語でstringは使えませんね…
C用の関数で、とか Cのときからある関数で という感じでしょうか?

読みづらい駄文ですみませんが、回答お待ちしています。

Re: stringからintへの代入

Posted: 2011年9月05日(月) 01:32
by h2so5
1文字だけならatoi()を使わずに文字コードから48を引けば数値に変換できます。

Re: stringからintへの代入

Posted: 2011年9月05日(月) 01:37
by Cr
なるほど!
その手がありましたか!
ちなみにそれって動かす環境によって変わったりはしませんか?
それと後のために知っておきたいのですが、二桁以上の場合はどうやりますか?

コード:

strint str = "J53"
int n;
n = str.at(1)*10+str.at(2);

ぐらいしか方法はありませんか?

Re: stringからintへの代入

Posted: 2011年9月05日(月) 01:51
by h2so5
Cr さんが書きました: ちなみにそれって動かす環境によって変わったりはしませんか?
ASCII文字が1バイトで表されるchar型の文字列データであれば基本的に大丈夫だと思います。(あまり詳しくないですが...(-_-;))
Cr さんが書きました: それと後のために知っておきたいのですが、二桁以上の場合はどうやりますか?

コード:

strint str = "J53"
int n = (int)strtol(str.c_str(), NULL, 0);
で変換できます。アルファベットは無視されます。

Re: stringからintへの代入

Posted: 2011年9月05日(月) 02:02
by Cr
どうもありがとうございます!
一行目のstrintは調べても出てこなかったのでstringとみてよろしいのでしょうか?
strtol…へぇ…
進数変換なんてものがあるんですね
10進数変換で変換できない文字(数字以外)を無視と…
ここで10進数なのに進数変換が思いつくなんてすごいですね!
どうもありがとうございました!!

Re: stringからintへの代入

Posted: 2011年9月05日(月) 02:25
by h2so5
Cr さんが書きました: 一行目のstrintは調べても出てこなかったのでstringとみてよろしいのでしょうか?
Crさんのソースでstrintになっていたのでそのままコピペしてしまいました(´・ω・`)
stirngが正しいです。

Re: stringからintへの代入

Posted: 2011年9月05日(月) 02:32
by Cr
あぁ、ほんとだ(笑)
僕がすでに間違えてますねw
スミマセン
どうもありがとうございました!

Re: stringからintへの代入

Posted: 2011年9月05日(月) 09:59
by たかぎ
h2so5 さんが書きました:
Cr さんが書きました: ちなみにそれって動かす環境によって変わったりはしませんか?
ASCII文字が1バイトで表されるchar型の文字列データであれば基本的に大丈夫だと思います。(あまり詳しくないですが...(-_-;))
そんな不確かなことより、単に '0' を引けばよいのでは?