2016-07-28 60 views
0

我有一個char陣列一個劃分的字符串中,我想循環,其中的所有數學運算劃分,由幾個選項

例如,現在我期待只爲=跡象,所以

for (char *p = strtok(data,"="); p != NULL; p = strtok(NULL, " ")) 
    { 
     numberOfChars++; 
    } 

我想循環這裏不僅"="是令牌,但它可能是這些還一個:我們在一個循環中增加+,-,*,\,=

所以爲每一個這些。

用於:a = b + c我們將獲得。

回答

3

您可以通過串

for (size_t i=0; i < strlen(data); i++) 
    { 
     if ((data[i] == '+') || 
      (data[i] == '-') || 
      (data[i] == '*') || 
      (data[i] == '\') || 
      (data[i] == '=')) 
     { 
      numberOfChars++; 
     } 
    } 
3

您可以提供一組分隔符標記作爲delim

C11標準,章§7.24.5.8

char *strtok(char * restrict s1, const char * restrict s2);

呼叫到的strtok函數A序列打破了串指向S1轉換爲標記 序列,每個它由來自指向 的字符串s2中的字符分隔。 [...]

所以,你的情況,如果你要來標記使用令牌的任何=+-*/輸入字符串,你應該使用類似

char * delim = "=+-*/`"; 
. 
. 
char *p = strtok(data, delim); 

注:正如在評論中提到由BLUEPIXY,請注意,

是CAUT當使用這些功能時。如果你確實使用它們,請注意:這些函數修改它們的第一個參數。這些函數不能用於常量字符串。分隔字節的標識會丟失。


在另一種替代方法,如果你在一個數學陳述計數運營商的數量,只要你可以循環陣列上,並使用isdigit()/isspace() T0找出非數字輸入和更新計數器。

+0

感謝symply循環很多,你可以詳細闡明瞭這些?顯示一些相關的簡單例子? – Curnelious

+0

我認爲有必要離開分隔符。 – BLUEPIXY

+0

@BLUEPIXY先生,這難道不僅僅是爲了得到點數還是我錯過了什麼? –