2017-04-15 57 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數是測量
- 用戶給出了這樣的投入,我不知道如何單獨分配或分配後的輸入作爲一個字符串我無法分開。
(也找不到合適的詞來搜索)
我已經試過這樣:

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

是的,我做了(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