2017-04-15 22 views
-2

異なる変数(文字列から)に数値を割り当てる必要があり、その文字を使用することによって数字にいくつかの操作を行う必要があります。
文字列と文字列の区別方法は?

m -15 3 c 1 -15 1 11 m 2 2 r 30 m -11 40 l 60 m 1 5 d<br> 


-every手紙は
-every数が
-userは、この入力を与える測定でアクションを表し、iは、別々に割り当てる、または後の文字列として入力を割り当てる方法がわかりません私は分けることができませんでした。
(も検索する権利フレーズを見つけることができませんでした)
私はこのように試してみました。このような

while(input[i]!='\0'){ 
     switch(input[i]){ 
      i++; 
      case 'm': a=input[i]*input[i+2]; 
         printf("%d",a); 
         i+=6; // going for the next letter if i assume that 
          // user gave the input with single spaces between every integer or letter 
         break; 
      case 'c': ............................ 
         i+=4; 
         printf("\n----CASE C"); 
         break; 

      default: printf("\nDEFAULT"); return 0; 

     } 

    } 

何かを、真実のユーザーはスペースなしまたは多くのスペースとそのない特定のどのように与えるかもしれません多くの入力ユーザーが与えますので、整数を抽出する方法はありますか? (また重要と整数文字が負であることができる)

+1

何か試しましたか? –

+0

はい私はwhile(input [i]!= '\ 0'){i ++ switch case:m}のようになりましたが、ユーザーが負の数または2桁の数字を与える可能性があるかどうかはわかりません。 1桁の数字と正の数値 – user3371196

+1

コメントに情報を落としてはいけませんが、試した[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を表示するように質問を編集してください。特定の難問について質問してください –

答えて

1

使用sscanf()パターン

"%n"を見つけるためにスキャンされた文字の数を記録します。文字列が一致する場合

sscanf(&input[i], " m%d%d %n", &op[0], &op[1], &n) 2を返します。

optional-space `m` optional-space integer optional-space integer optional-space 

とセットnをスキャンした文字の数に。

#include <stdio.h> 
int main() { 
    char input[] = "m -15 3 c 1 -15 1 11 m 2 2 r 30 m -11 40 l 60 m 1 5 d\n"; 

    int op[4]; 
    int i = 0; 

    while (input[i]) { 
    int n = 0; 
    if (sscanf(&input[i], " m%d%d %n", &op[0], &op[1], &n) == 2) { 
     printf("CASE m: %d\n", op[0] * op[1]); 
    } else if (sscanf(&input[i], " c%d%d%d%d %n", &op[0], &op[1], &op[2], &op[3], &n) ==4){ 
     printf("CASE c\n"); 
    } else if (sscanf(&input[i], " r%d %n", &op[0], &n) == 1) { 
     printf("CASE r\n"); 
    } else if (sscanf(&input[i], " l%d %n", &op[0], &n) == 1) { 
     printf("CASE l\n"); 
    } else if (sscanf(&input[i], " d %n", &n), n) { 
     printf("CASE d\n"); 
    } else { 
     printf("?\n"); 
     n = 1; 
    } 
    i += n; // advance to the next unprocessed char 
    } 
} 

出力これは、各アクションをとる

CASE m: -45 
CASE c 
CASE m: 4 
CASE r 
CASE m: -440 
CASE l 
CASE m: 5 
CASE d 

は、オペランドの固定数を使用します。追加のコードはバリアントのオペランド数を扱うことができます。

+0

これはまた、 。私はこの技術を私の心に残していきます – user3371196

関連する問題