• ベストアンサー

配列型の数字データをint型に変える方法

こんばんは。 C言語を勉強しているのですが、わからない事が有り投稿しました。 atoi関数と同じような関数を作ろうとして、配列の中の 数字を取り出し、関数内の別配列に収めたのですが、これをint型としてmainに戻す場合どのようにして型変換をしたらよいのかわかりません。 (取り出した数字の並びはそのままで) 何か方法をご存知の方がいましたら、回答をお願いします。

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

つまり、「数字で構成された文字列を、int型に変換したい」ということでいいのでしょうか? ならば、  int my_atoi(char *str)  {    int ret = 0;      while (isdigit(*str))    /* isdigit()を使うには、ctype.hが必要 */      ret = ret*10 + (*str++ - '0');    return ret;  } で良いでしょう。 ちなみに、数字列→数値の変換は、「型変換」ではなくて「データ変換」といいます。

happy21
質問者

お礼

回答下さりありがとうございました。 型変換ではなくデータ変換というのですね。 勉強になりました。 ありがとうございました。

関連するQ&A

  • c言語 int型の数字をchar型の配列に

    c言語についてです。 int型の数字をchar型の配列に入れたいです。 関数に対してint型の数字を文字列として渡し、 関数内でchar型の配列に格納したいです。 例として、 a(char a[]){  ~~  ~~ } int main(void){ int x = 5678;  ~~  a(x); } とできるようにしたいです。 しかしこれだと5678という値がそのままchar型の一つの配列に入る?ため正しくないです。 欲しい結果としてはちゃんとa関数内で、 a[1] = '5' a[2] = '6' a[3] = '7' a[4] = '8' となってほしいです。 もともと渡す値が”5678”となっていれば結果は正しく出るのですが、 渡す値がint型と決まっているためどうにかして5678を”5678”とすればいいのではないかと考えています。 つまり5678を単純に文字列に変換すればいいのでしょうか? またプログラム内ではsprintfやatolを使用しないで実現させたいです。 難しいかもしれませんがお願いします。 なんだか説明が下手ですみません。 お願いいたします。

  • int main(int argc, char* argv[]) についての質問

    こんにちは.つね日ごろ思っている質問させてください. Cの参考書には, (1) void main(void) { } (2) int main(int argc, char* argv[]) { return 0; } の2つのパターンが記載されていますが, どういう違いがあるのでしょうか? (1)の場合main関数は,型を持たず,引数も持たない. ※Turbo Cなどのコンパイラーでは, return文がないと警告出ます. (2)の場合は,int 型をかえし,引数はint型 変数と char型ポインタ配列(?) を指定している. といったくらいしか分かりません. (2)に関してもう少し述べれば, コマンドラインからファイルを指定し,実行することが できると勉強した記憶があるのですが, 理解があいまいです. 特に(2)の場合のmain関数の意味と,その使い方について アドバイスお願い致します.

  • C言語のint型の配列が分かりません

    #include<stdio.h> int main(void) { int str[ ]={0,1,2} printf("%s\n", str); return 0; } というプログラムをC言語でつくってみましたが動きません.(012と表示されて欲しかったのですが) int str[ ]={1,2,3}の部分をchar str[ ]={'0','1','2'}とすれば動きます. そこで質問なのですが, printf("~%s~", (配列名));  はchar型の配列にしか適応できないのですか? ※追記 puts関数の定義は int puts (const char *str); であるそうなので char型の仮引数にはchar型のアドレスを渡さなければいけません. ではprintf関数の定義は一体どんなものなのですか?

  • 文字列をint型へ変換するには?

    c言語初心者です。 こちらのプログラムだとうまく表示されません何故でしょう? わかる方是非教えていただきたいと思います。 #include<stdio.h> #include <stdlib.h> int main() { int  num ;     char sum1[4]; printf("数字 str1 =>"); scanf("%d",&num); num= atoi(sum11); printf("sum1= [%d]\n",num); } コマンドに数字を入力したあとintに変換してnumに表示させたいのですが、、、、

  • int型の内容をbyteの配列にコピー

    int型の内容をbyteの配列にコピーする方法を教えて下さい。 int i_value = 500; byte[] by_value; by_value = new byte[4]; // どのような処理が必要ですか? by_value[0]には、0x1 by_value[1]には、0xf4 と格納したいです。 数字→文字列→文字(byte)できたのですが…。 C言語の場合、memcpy関数で型が異なってもキャストすれば回避できました。 JAVAでの方法を教えて下さい。

    • ベストアンサー
    • Java
  • プログラミング時の警告(キャスト)について

    こんにちは。 C言語についての質問です。 char型の数字の配列を、int型の数字の配列に変えてから関数に飛ばしたいと思い atoi関数を使おうとしたのですが、下記のように書くと char array[20]; hogehoge(atoi(array)); pointer from integer without a castと警告になります。 ここで、 char array[20]; int copy[20]; copy[20] = atoi(array); hogehoge(copy); と書くと警告は無くなりました。 最初の書き方だと何がいけないのでしょうか? よろしくお願いします。

  • int main(void)

    C言語の問題集をやっているのですが、 本にはmain関数の最初にint main(void)のような書き方が してあります。 学校ではmain() と習ったのですが、本には上のようにかいてあります。 どのように違うのでしょうか? というかmain関数のところに引数が入っている意味がわかりません。 どういうことがというと(void)ってなんですか? またint mainというのはint型の関数だと思うのですが、 なかではdouble型とかも使えます。 お願いします。

  • 数字のINPUT

    数字を連続して、入力させようと思っています。 例 1,2,3   1 2 3   1, 2, 3, ⇒a[0]=1,a[1]=2,a[2]=3 上の例の様に、数字が出てくれば、その数字だけをint型で使えるようにint型の配列に格納したいです。 scanf()を使って%dでやるとバグが発生します。 gets()などでchar型でとった物をatoi()で変換する方法がよく分かりません。 私がやると、9までしか取り込めませんでした。 どなたか良い方法を教えてください。

  • int *a = new int; エラー

    下記をコンパイルすると、'int' 型は 'int *' 型に変換できない(関数 main() ) とエラーが出てしまいました。 何がおかしいのでしょうか ? 初歩的な間違いをしていると思いますが、アドバイスお願いします。 #include<iostream> #include<stdlib> #include<ctime> using namespace std; void main(void) { int *a = new int; a=rand(); cout<<a<<endl; delete a; }

  • Javaの配列の宣言方法のメリット?

    1週間ほど前からJavaを独学している者です。 C言語をその前からやっていて、初心者レベル程度ならわかると思います。 そこで、質問です。 C言語の配列宣言:   int array[10]; Javaの配列宣言:   int array[] = new int[10]; 二つの言語とも、要素10個のarray1次元配列変数を宣言していると思います。 C言語の書き方はシンプルなので、納得がいきますが、Javaの方はどうしてこの形で宣言をするのかわかりません。(自分が言語製作者ならシンプルな書き方を採用します) だから、このような宣言の方法をとるということは何か理由があるのだと思います。 自分が思うところ、JavaはC言語より、柔軟で多機能だとおもうので、その影響で汎用性をますために、 長くなっているのかな~?と思っています。 こんごJavaの学習を進めていくと、例えば、   int array[] = new double[10]; //←エラーになりました みたいに型のちがう、宣言が出てきたりするのでしょうか? ちらっと、学習に使っている本をみたところ、動的配列の作成は別の操作で実現しているようなので、 「動的とは関係ないのかな?」と思っています。 長くなりましたが、Javaの配列宣言のメリットを教えてください。

    • ベストアンサー
    • Java

専門家に質問してみよう