2016-07-06 12 views
-9

私は入力値を分割する方法は?

int a= 254321; 

に必要な、その後、a

値は、そのような私たちはそれをどのように行うか

char b = {21,43,25}; 

として新しい変数に配置する必要がありますか?

+5

「/」と「%」演算子を使用してください –

+0

この質問にはどのような研究がありますか?ここで[\ [mcve \]](http://stackoverflow.com/help/mcve)を作るものを見てください。 – sjsam

+4

'char b = {21,43,25};'。これは有効ではありません。例だけによる要求は、通常、不明です。そして無効な例を与えることは確かに不明です。あなたは全くアイデアを持っておらず、何の試みもできません。 – kaylum

答えて

2

@M.Mによって言われているように、/%はあなたの友人です。それらを使用することによって、あなたは以下のような関数を書くことができます。

#define SPLITTER 100 

/* ensure the the value of SPLITTER is not too big for parts to fit into char */ 
#if SPLITTER > 256 
#error value of SPLITTER is to big for type char 
#endif 

int split(int value, char *parts, int len) 
{ 
    int count = -1; /* assume error */ 


    if ((parts) && (len > 0)) /* valid input? */ 
    { 
     count = 0; /* ok, we have valid input */ 

     while (value != 0) 
     { 
      if (count < len) /* ensure not to exceed size of parts! */ 
      { 
       parts[count] = value % SPLITTER; 
      } 

      value /= SPLITTER; 

      count++; 
     } 
    } 

    return (count); 
} 

この関数は、(、SPLITTER - 1の最大の「サイズ」との部分にvalueを分割partsで可決されたメモリに書き込みして行わ分割数を返します。無効な入力の場合は-1)。

使用量は次のようになりますあなたの例については:

int result; 
char parts[10]; 
int i; 

result = split(254321, parts, 10); 
for (i = 0; i < result; i++) 
{ 
    printf("part #%d: %d\n", i + 1, parts[i]); 
} 

出力は次のようになります。

part #1: 21 
part #2: 43 
part #3: 25 
+0

OPは 'b'を' int'ではなく 'char'配列と言いました。それはタイプミスかもしれません。とにかく良い説明 – Cherubim

+1

@CherubimAnandそれを述べてくれてありがとう。最終的な結果(char part [] = {21、43、25} 'または' char * parts [] = {"21"、 "43" "25" } ')。元の投稿を変更しました。 –

+0

OPに表示されている努力なしに、不完全で不明確な質問に対する完全なコードの回答を投稿することにより、コードの募集を奨励しないでください。 – Lundin

2

はもちろんのこと、あなたの質問は本当に曖昧です。あなたが尋ねることと使用される構文について正確に記述してください。ステートメントchar b = {25,43,21};任意のcコンパイラによる直接的な構文エラーだけを意味する可能性があります。

と仮定すると、あなたの入力は常に6桁の番号である&要件は チャーBである[3] [2] 単純itoaは()シミュレーションがあり得る:それだ

int num, i, j,d; 
char b[3][2]; 

for(i=2; i>=0; i--) 
    for(j=1; j>=0; j--){ 
    d = num % 10; 
    b[i][j]= d+48; 
    num = num/10; 
    } 

、あなたのアレイであります使用する準備ができて。お役に立てれば。

+1

OPで示されている努力なしに、不完全で不明瞭な質問に対する完全なコードの回答を投稿することにより、コードの募集を奨励しないでください。 – Lundin

+0

@ Lundin、アドバイスをいただきありがとうございます。私は新しいユーザーで、Stackoverflowの文化に慣れていません。私は単純なクエリを見て、答えました。しかし、はい、私は確かに将来的にアドバイスを心がけています。ありがとう。 :) –

+0

コミュニティが怒っているコードの乞食部分を別にすれば、疑問が不明または不完全なように見える場合は、OPにコメントを残して、回答を投稿するよりも詳細な情報を求めてください前提条件そうすれば、推測ゲームをするのではなく、より質の高い質問を実施します。 – Lundin

3

モジュールと分割を使用します。

int main(void) 
{ 
    int a = 254321; 
    int b[5] = {0}; 
    int i; 

    for (i = 0; a ;i++) { 
     b[i] = a % 100; 
     a = a /100; 
    } 
} 
+0

オペレータが 'int'ではなく' char'配列として 'b'を書いた – Cherubim

+0

OPで示されているように、不完全で不明瞭な質問に対する完全なコードの回答を投稿することを奨励してはいけません。 – Lundin

+0

'a'が10桁の10進数よりも小さい場合、' a' = 0までではなく5つのすべての要素に対してiterateを行うか、または '' int b [5] = {0};を初期化する必要があります。 – Clifford

関連する問題