stringからintへの代入

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Cr

stringからintへの代入

#1

投稿記事 by Cr » 14年前

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に代入できるのでしょうか?

Cr

Re: stringからintへの代入

#2

投稿記事 by Cr » 14年前

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

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: stringからintへの代入

#3

投稿記事 by h2so5 » 14年前

1文字だけならatoi()を使わずに文字コードから48を引けば数値に変換できます。

Cr

Re: stringからintへの代入

#4

投稿記事 by Cr » 14年前

なるほど!
その手がありましたか!
ちなみにそれって動かす環境によって変わったりはしませんか?
それと後のために知っておきたいのですが、二桁以上の場合はどうやりますか?

コード:

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

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: stringからintへの代入

#5

投稿記事 by h2so5 » 14年前

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

コード:

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

Cr

Re: stringからintへの代入

#6

投稿記事 by Cr » 14年前

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: stringからintへの代入

#7

投稿記事 by h2so5 » 14年前

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

Cr

Re: stringからintへの代入

#8

投稿記事 by Cr » 14年前

あぁ、ほんとだ(笑)
僕がすでに間違えてますねw
スミマセン
どうもありがとうございました!

たかぎ
記事: 328
登録日時: 15年前
住所: 大阪
連絡を取る:

Re: stringからintへの代入

#9

投稿記事 by たかぎ » 14年前

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

閉鎖

“C言語何でも質問掲示板” へ戻る