実現したいこと
- 配列の要素をつなげて、数桁の数字を作りたい
例えば、
int buf[]={2,5,4};
int buf2[]={0,1,3,5};
のような要素を持った配列があるとして、この配列から
int a = 254;
int b = 135;
のような値を作ることは可能でしょうか。
試したこと
char型で文字列の結合により値を作る方法は良く見ますが、数字としてそのまま扱う方法が見つからなかったので、
教えてください。
補足情報(FW/ツールのバージョンなど)
言語はC
開発環境はe2studio
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
各要素の何れかが2桁以上あるケースの処理です。
C
1#include <stdio.h> 2int main(void) { 3 int buf[]={0,123,0,56,7}; 4 char temp[128]; 5 int i,n; 6 int a; 7 a = 0; 8 for (i = 0;i < sizeof(buf)/sizeof(int);i++){ 9 n = buf[i]; 10 do { 11 n = n / 10; 12 a = a * 10; 13 }while(n > 0); 14 a = a + buf[i]; 15 } 16 printf("a=%d\n",a); 17 return 0; 18} 19
実行結果
a=1230567
投稿2023/12/02 09:13
総合スコア5493
0
実装例です。
C
1#include <stdio.h> 2int main(void) { 3 int buf[]={2,5,4}; 4 int buf2[]={0,1,3,5}; 5 int i; 6 int a,b; 7 a = 0; 8 b = 0; 9 for (i = 0;i < sizeof(buf)/sizeof(int);i++){ 10 a = a * 10 + buf[i]; 11 } 12 for (i = 0;i < sizeof(buf2)/sizeof(int);i++){ 13 b = b * 10 + buf2[i]; 14 } 15 printf("a=%d\n",a); 16 printf("b=%d\n",b); 17 return 0; 18} 19 20
実行結果
a=254
b=135
投稿2023/11/29 01:35
総合スコア5493
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/11/30 04:48
2023/11/30 09:06
2023/11/30 11:11
2023/12/02 06:25
2023/12/02 06:43
2023/12/02 09:06
2023/12/02 09:09
0
はい、可能です。
buf[0] * 100 + buf[1] * 10 + buf[2]
buf2[0] * 1000 + buf2[1] * 100 + buf2[2] * 10 + buf2[3]
のような計算をするようコードを組みましょう。
投稿2023/11/28 23:55
編集2023/11/29 00:04総合スコア21601
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/11/29 00:03
2023/11/29 00:18
2023/11/29 00:38
2023/11/29 04:24
0
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <ctype.h> 4#include <stdarg.h> 5 6int toInt(char *f, ...) { 7 va_list ap; 8 int v = 0; 9 va_start(ap, f); 10 //regex: a?\d?[boxd] 11 int isarray = *f == 'a' ? f++,1 : 0; 12 int len = isdigit(*f) ? *f++ - '0' : va_arg(ap, int); 13 int times = *f == 'b' ? 2 : *f == 'o' ? 8 : *f == 'x' ? 16 : 10; 14 if(isarray) { 15 int *a = va_arg(ap, int*); 16 for(int i=0; i<len; i++) v = v * times + *(a++); 17 } else { 18 for(int i=0; i<len; i++) v = v * times + va_arg(ap, int); 19 } 20 va_end(ap); 21 return v; 22} 23 24int main(void) { 25 int a[] = { 2, 5, 4 }; 26 printf("%d\n", toInt("a3d", a)); 27 printf("%d\n", toInt("ad", 3, a)); 28 printf("%d\n", toInt("a", 3, a)); 29 printf("%d\n", toInt("4d", 0, 1, 3, 5)); 30 printf("%d\n", toInt("d", 4, 0, 1, 3, 5)); 31 printf("%d\n", toInt("", 4, 0, 1, 3, 5)); 32 printf("%d\n", toInt("8b", 0, 1, 1, 0, 1, 1, 0, 1)); 33 printf("%d\n", toInt("3o", 1, 5, 5)); 34 printf("%d\n", toInt("2x", 0x6, 0xd)); 35}
254 254 254 135 135 135 109 109 109
投稿2023/11/29 09:44
編集2023/11/29 18:15総合スコア13170
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/11/29 22:56
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/12/02 09:26
2023/12/02 13:37 編集
2023/12/03 23:03
2023/12/03 23:24