• ベストアンサー

桁をわけたい!

char* str = "456"; int cou[3]; // 文字列を数値に変換 int num = atoi( str ); このnumは456が入っているのですが これをcou配列に cou[0]=6 cou[1]=5 cou[2]=4 という具合に桁数値をわけて受け取りたいのです 皆目見当がつきません C言語はじめて1週間の者でもわかるように どうか、教えていただきたいm< _ _ >m

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

おっと失礼。 #include <stdio.h> #include <stdlib.h> #define N (3) int main(void) { char *str = "456"; int cou[N], num, i; num = atoi(str); for (i = 0; i < N; i++) { cou[i] = num % 10; num /= 10; printf("cou[%d]=%d\n", i, cou[i]); } return 0; }

mangakamezasu
質問者

お礼

おおお、感謝です! ありがとうー

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.2

こう言うのって、言語毎のレッスンサイトとか質疑を行うサイトがあるんだが 最近、そっちでなくココで質問する人増えているなぁ 数値の456を、文字配列("4"、"5"、"6")に変換するというごく初歩的なもんだね 基本的な考え方としては、 1.数値をゼロ(無くなる)まで以下の処理を繰り返す 2.数値を10で割った余り(剰余)を求める 3.その余りの数値を数字に変換する 4.変換した数字を配列に格納する <- #2の新しい数値にする 5.10で割った商を元の数値に置き換える 言語がどうのこうのという前の段階では無いのか?

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

#include <stdio.h> #include <stdlib.h> #define N (3) int main(void) { char *str = "456"; int cou[N], num, i; num = atoi(str); for (i = 0; i < N; i++) { cou[N - 1 - i] = num % 10; num /= 10; } for (i = 0; i < N; i++) { printf("cou[%d]=%d\n", i, cou[i]); } return 0; }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 加算、減算、乗算、除算について

    // 加算、減算、乗算、除算について // 記号と数値にそれぞれ別の配列に分けました。 // そこから、どうすれば計算ができるのか // 悩んでいます。よろしくお願いします。 #include<iostream> using namespace std; char **tokei(char *str1,char *str2,int *count,char *kigouX); int main() { int count; int *num; char **www; char kigo[12]; char str1[30],str2[]="+-*/"; strcpy(str1,"123+45-6*789/"); www=tokei(str1,str2,&count,kigo); num=new int[count]; for(int n=0;n<count;n++) { num[n]=atoi(www[n]); } // 数値に変換num[]、記号を順番に抽出kigo[] -->OK // 記号に沿って、数値を演算すればよい。 // ここがやり方(理屈)がわからない。 getchar();{}return 0; } char **tokei(char *str1,char *str2,int *count,char *kigouX) { int cnt=0; int m=0; for(int a=0;*(str1+a)!='\0';a++){} for(int b=0;*(str2+b)!='\0';b++){} for(int i=0;i<a;i++) { for(int j=0;j<b;j++) { if(*(str1+i)==*(str2+j)) { *(kigouX+m)=*(str1+i);m++; *(str1+i)='\0'; cnt++; } } } *(kigouX+m)='\0'; char **c; c=new char*[cnt]; *count=cnt; for(int m=0;m<cnt;m++) { c[m]=str1; while(*str1!='\0'){str1++;}str1++; } return c; }

  • 文字列をうまく返してくれない

    数値を文字列として呼び出し元に渡し、呼び出し元で文字列を数値に変えようとしたのですがatoi関数(strtolを使うと最初の文字のみ帰ってくるため2桁以上の数値に対応できない)を使うとうまく行きませんでした。 どのように変更したらatoiが使える文字列になりますか? #include <stdio.h> #include <stdlib.h> static struct{   char *name; }kuda[5]={   { "もも" , "りんご" , "みかん" , "バナナ" , "パイナップル" } } char *re_3( void ){   int a = 3;   char str_h[100];   char *str;   sprintf_s( str_h , 100 , "%d" , a );   *str = *str_h; //原因はおそらくここ   return str; } void main( void ){   printf( "%s" , kuda[ atoi( re_3() ) ].name ); }

  • 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; } お手数をお掛けしますが、 よろしくお願い致します。

  • 文字列を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に表示させたいのですが、、、、

  • 関数の戻り値について

    初心者です。 char *inttochar(int numb); int main() { cout << inttochar(num); } char *inttochar(int numb) { char str[20]; ..... return str; } というように、「numb」に数値を代入して、 数字の文字列を返したいのですが、 (多分)アドレスしか表示がされないのです。 どうすればよいでしょうか?

  • C++流入力の妥当性チェック方法

    お世話になります。 C言語の入門書には、scanfを使って数字を入力させる時は、一旦文字列に入力させ、atoiを使って数値に変換すると良いと書いてありました。 #include "stdafx.h" #include "iostream" #include "cstring" #include "string" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int num=0; // char tmp[20]; string tmp; num=atoi(gets(tmp)); cout << num; return 0; Cの本にかいてある物をC++っぽく書いてみたつもりです。 しかしこれではchar tmp[20]を使ったとき、入力した文字列が数字以外の時はnum=0になってしまい、入力として0を与えたのか入力エラーなのか判定できません。 また、tmp[20]としているので、20文字以上入力された場合、実行エラーが発生してしまいます。 そこで、string tmpとしてやることで、入力される文字数を考えることなくプログラミングできるようにすればいいじゃないかと考えたのですが、atoiはcharにしか対応していないので、stringでは使えません。 stringを使って入力される文字数問題を考えることなく、また、数字以外の入力を受け付けないようにするスマートな方法はないのでしょうか?

  • 文字型配列に数値を文字として代入したいです

    掲題の通りですが、listという配列に数値や文字を入れたいです。 数値は必ず整数1桁、文字はAかBの1文字です。 配列は char list[] = new char[8]; として定義しています。 numにAかBを入れると、代入も表示もうまくいきます。 しかし、数値を入れると以下のような動作となります。 list[i] = num とすると 「不適合な型: 精度が失われる可能性があるintからcharへの変換」 というエラーが表示されます。 list[i] = (char)num; に変更するとエラーは出ませんが、表示がうまくされません。 list[i] = String.valueOf(num); に変更すると 「エラー: 不適合な型: Stringをcharに変換できません:   list[i] = String.valueOf(num);」 というエラーが表示されます。 何か良い方法はないでしょうか。

  • C言語でファイルの内容を strtok関数 を使って数字と文字を分けて

    C言語でファイルの内容を strtok関数 を使って数字と文字を分けて配列に格納したいのですが、うまくできません。 どこが駄目なのかご指摘をお願いします! ファイル内容 20 田中 10 鈴木 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc,char *argv[]) { FILE *fp; char str[256]; char *tp; int i=0; int num[10]; char na[10]; fp=fopen(argv[1],"r"); while(fgets(str,sizeof str,fp)!=NULL); tp = strtok ( str, " " ); while(tp != NULL ) { num[i]=atoi(tp); tp = strtok( NULL," "); if ( tp != NULL ){ na[i]=*tp; } i++; } printf("%d\n%s",num[0],na[0]); printf("%d\n%s",num[1],na[1]); fclose(fp); return 0; }

  • atoi関数の自作

    C言語でatoi関数を自作したのですが、正確な答えが出てきません 以下にソースを貼るのでどの当たりを直したらよいのかご教授願います。 1~9までの文字列を一つずつ配列に格納して変換する事を目的として作っています。 実行すると桁あふれしたような値が出てきてしまいます #include<stdio.h> #include<stdlib.h> int pow_10(int m) { int i,prod=1; for(i=0;i<m;i++){ prod=prod*10; } return prod; } ascii2int(char number[]){ int i,j,n[10],num; if(!strcmp(number,"")){ printf("Null string\n"); exit(1); } i=0; while(n[i]!='\0'){ n[i]=n[i]-48; i++; } num=0; for(j=0;j<i;j++){ num=num+n[j]*pow_10(i-1-j); } return num; } main(){ char su[10]; for(;;){ printf("Enter an integar:"); gets(su); if(!strcmp("x",su)){ break; } printf("%d\n",ascii2int(su)); } }

  • C言語で、ファイルを読み込んで数字と名前に分けて配列に格納に関する質問

    C言語で、ファイルを読み込んで数字と名前に分けて配列に格納に関する質問です! ファイルを開いた後でエラーとなるのですが、何が足りないのでしょうか? ファイル内容 20 田中 10 鈴木 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc,char *argv[]) { FILE *fp; char str[256]; char *tp; int k,i=0; int num[10]; char na[10][20]; fp=fopen(argv[1],"r"); if(fp==NULL){ printf("ファイルを開けません\n"); return 1; }else{ printf("開けた\n"); } while(fgets(str,sizeof str,fp)!=NULL){ tp=strtok(str," "); num[i]=atoi(tp); tp=strtok(NULL," "); strcpy(na[i],tp); i++; } printf("%d\n%s\n",num[0],na[0]); printf("%d\n%s\n",num[1],na[1]); fclose(fp); return 0; }