• ベストアンサー

char型全角数字から、int型半角数字への変換方法

char型全角数字から、int型半角数字への変換するためには どのような方法があるのかを探しています。 同カテゴリ内でも色々と検索を掛けて見たのですが 適当なものが見当たらなかったため、質問させていただきます。 chara kazu[]="8";(全角数字) を int kazu2=8;(半角数字) に変換するためにはどうすればよいでしょうか? 変数に代入してfor文で使用が目的です。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★アドバイス ・マイクロソフト社製のコンパイラなら全角文字コードから半角文字コードへの  変換関数があります。→_mbctombb()昔はzentohan()という名前でした。懐かしい。  http://msdn.microsoft.com/ja-jp/library/ms350177(VS.71).aspx→『_mbctombb』  これを使えば数字以外にも英字、記号も対応する半角文字に変換できます。 サンプル: #include <stdio.h> #include <mbstring.h> // メイン関数 int main( void ) {  unsigned char kazu[] = "1234567890";  unsigned char *p;  unsigned int moji;    for ( p = kazu ; *p != '\0' ; p += 2 ){   moji = (p[0] << 8) | p[1];   moji = _mbctombb( moji );   printf( "%c%c→%c\n", p[0], p[1], moji );  }  return 0; } または unsigned char kazu[] = "8"; unsigned int moji; moji = _mbctombb( (kazu[0] << 8) | kazu[1] ); printf( "%s→%c\n", kazu, moji ); ※マイクロソフト社製以外のコンパイラや移植性も考えるならご自分で  全角文字→半角文字の変換するルーチンを書いて下さい。仕組みは  既にredfox63さんが回答しています。なお、いろいろな方法があります。

参考URL:
http://msdn.microsoft.com/ja-jp/library/ms350177(VS.71).aspx
sshin2008
質問者

お礼

回答有難う御座います。 mbctombbも初めて見た関数です。 自分ではこの関数までたどり着くことが出来ませんでした。 大変参考になり、問題解決いたしました。 どうも有難う御座いました。

その他の回答 (3)

  • takoashi
  • ベストアンサー率39% (21/53)
回答No.3

質問を見誤ってました。 コードができているならそれを乗せたほうが回答に近づきますよ。 あと、環境がわかったほうがいいです。 Windowsなら LCMapString で、全角→半角 の変換が可能です。

sshin2008
質問者

お礼

Windowsでvisual studioを使ってプログラムを書いています。 LCMapStringですか?初めて見た関数です。 色々調べて物にしたいと思います。 大変参考になりました。 どうも有難う御座います。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

# 全角がShift-JISならば ・・・ char wnum[] = "0123456789"; char anum[] = "0123456789"; char kazu[] = "8"; int kazu2 = -1; char *pPos = strstr( wnum, kazu ); if ( pPos != NULL ) {   int nIndex = (int)( pPos - wnum ) / 2;   char buf[20] = {0};   strcpy( buf, &anum[nIndex], 1 );   kazu2 = atoi( buf ); } といった具合です # 適切なヘッダーをインクリュードしてください

sshin2008
質問者

補足

回答有難う御座います。 只今ヘッダをつけてインクルードしてみた結果 ビルドでいくつかエラーが発生してしまいましたので 修正をしながら色々試しています。 C言語初心者なので、redfox63が書いてくださったプログラムを読み取ることが出来ず苦戦しています。 もう少し粘って見ますので、解決いたしましたらまた改めて御礼を述べさせていただきたいと思います。

  • takoashi
  • ベストアンサー率39% (21/53)
回答No.1

atol strtol

sshin2008
質問者

お礼

早速の回答有難う御座います。 atoiで検索を掛けたところwiki等では やはりテストプログラムの結果同様 全角数字を入れるとNULLが戻り値と成るようです。 後他に必要な処理が必要な場合何が必要なのでしょうか? 自分でも引き続き探してみます。 宜しくお願い致します。

sshin2008
質問者

補足

早速の回答有難う御座います。 自分でも色々調べた結果 atoi,atol を使うのではないか?というところまでは辿り付いたのですが、戻り値が"0"NULLに成ってしまい。 取得したい数値とは異なってしまいます。 テストプログラム #include <stdio.h> #include <stdlib.h> void main() { char kazu[]="8"; int kazu2; kazu2 = atol(kazu); printf("%d\n",kazu2); }

関連するQ&A

  • 全角数字を半角数字に変えたいがtr/0...9/0...9/だけではうまくいかない。

    HTMLから、全角数字を入力しても、半角数字に変換して、 計算処理をしたいのですが、うまくいきません。現在 $kazu =~ tr/0123456789-/0123456789-/; としているのですが、 全角で 123 と入力すると、 030507 と返ってきます。 どうしたら良いか教えてください。 8進数→10進数 16進数→10進数の 変換を試みたのですが、違うみたいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 半角数字が入ったデータで、半角数字を全角数字に変化関したいのですが

    半角数字が入ったデータで、半角数字を全角数字に変化関したいのですが うまくいきません。 文字コードはUTF-8です。 下記のような、関数を使ってまず半角の1を全角の1に変換しようとしました。 int substitute(unsigned char *s, int n){ int num; num= atoi(s); switch(num) { case '1': s[n] = 0xEF; s[n+1] = 0xBC; s[n+2] = 0x91; s[n+3] = 0x0d; break; defult: break; } return 0; } この関数をかましても半角は全角になりませんでした。 誰か、ご教授願えませんか?

  • char型からint型への変換

    char型からint型への変換 char a[6]=3+2-5; int e[6]; (全て0で初期化済) for(i=0;i<6;i++){ if(c[i]=='0'||c[i]=='1'||c[i]=='2'||c[i]=='3'||c[i]=='4'||c[i]=='5'){ e[i]=((int)c[i]-'0'); printf("%d",e[i]); }} for(i=0;i<NUM_DATA;i++){ printf("%d",e[i]); } このプログラムでは上のe[]の出力では「325」と出力されますが、 下のe[]の出力ではめちゃくちゃな数字が出力されてしまいます。 きちんと数字だけを抽出しint型に変換するにはどうしたらいいでしょうか? C言語で行っています。よろしくお願いします。

  • char型配列をint型に代入するには

    char型の配列(文字列)の各要素ににそれぞれ数字が一つ入れました。 str[0] = '0' str[1] = '1' : str[5] = '5' これをfor文を使ってint型変数に入れたい代入するにはどうれればいいですか? str[0] → dat1 str[1] → dat2 : str[5] → dat5

  • 全角の数字を半角にする方法を教えてください

    ワードに書いた5万字ほどの文章があります。 英数字を全角で書いたのですが、半角にする必要が出てきました。 けっこう沢山数字を使っているので、1つ1つ手作業で半角に直すのはとても大変で、ミス出る可能性があります。 そこで、全角の英数字を半角に一発で変換するような技をご存知でしたら教えて頂けませんでしょうか? 宜しくお願い致します。 まい

  • 【エクセル】半角数字→全角数字

    エクセルですでに半角で入力されている数字を全角数字に一括変換する方法はありますか? (1)住所録で半角入力されている番地等の数字のみをを全角に変換する方法 (2)電話番号など、全て数字で入力しているセルを一括で全角に変換する方法

  • ワードで数字の全角を半角に(カタカナは全角のままで)変換するには?

    ワードに100ページの文章があります。全角数字が散在しています。全角数字を半角に直したく、半角操作をかけるとカタカナも半角に変換されてしまいます。数字だけ変換されるようにするには、どのようにしたらいいのでしょうか。ワードの、書式メニュー→文字種の変換→半角、で操作をおこないました。

  • int型変数をchar型変数に格納する方法

    int型数値をchar型変数に格納したいのですが、 sprintf()とatoi()を用いてやりましたが、 うまくいきません。 考えたコードを下記します。 int get_y(){ int y=2005; return y; } int main(){ char year; char str[5]; //intをcharに変換して格納している sprintf(str,"%d",get_y()); //数値として代入 year=atoi(str); //yearには2005が格納されていない! cout<<year<<endl; char ans; //このchar型変数に数値を代入する。 ans=year; cout<<ans<<endl; return 0; } お手数をお掛けしますが、 よろしくお願い致します。

  • 【Excel】 全角(数字だけ)を半角にしたい

    住所の表を整理しているのですが、数字が全角になっているので、半角に変換したいと思い、ASC関数を使ったのですが、カタカナまで半角になってしまいました。 カタカナは全角で、数字だけ半角にしたいのですが。。 数字だけを半角にする方法ってないんでしょうか?

  • 全角から半角に変換する

    Javaで、文字列の中に全角があれば単純に半角に変換するような処理をしたいです。具体的には、次のような文字列があった場合、以下のように変換したいです。 <変更前> あ亜アアaaAA11%% <変更後> ア亜アアaaAA11%% つまり、以下のようにしたいです ・全角ひらがな→半角カタカナ ・漢字:何もしない ・全角カタカナ→半角カタカナ ・半角カタカナ:何もしない ・半角アルファベット→何もしない ・全角アルファベット→半角アルファベット ・半角数字→何もしない ・全角数字→半角数字 ・半角記号→何もしない ・全角記号→半角記号 上記のように書くと複雑に見えますが、要は基本的に半角に相当する文字がある場合には半角にしたいだけです。Googleで探してみましたが、Javaで標準で上記のような処理を出来るようなメソッドを見つけることができませんでした。このようなメソッドは標準で存在しますでしょうか? 自作する場合、いくつかアプローチがあると考えられますが、最もパフォーマンスを速くしたい場合にはどのような作り方にした方がよいでしょうか。お手数ですが、宜しくお願いします。 <追伸> プレビューで見たら、半角の文字が全角に自動的に変換されてしまいました。。 例文からはわかりにくいかも知れませんが、宜しくお願いします。。

    • ベストアンサー
    • Java

専門家に質問してみよう