用一些选项之一划分一个字符串

时间:2016-07-28 09:48:53

标签: c strtok

我有一个char数组,我想在其中循环,其中除以所有数学运算,

例如,现在我只关注=符号,所以

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

我想循环不仅"="是令牌,而且它也可能是其中之一:+,-,*,\,=

这样我们就为每一个循环增加numberOfChars

因此:a = b + c我们将获得 3

2 个答案:

答案 0 :(得分:3)

您可以提供分隔符标记作为delim

来自C11标准,章节§7.24.5.8

  

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

     

对strtok函数的一系列调用将s1指向的字符串分解为a   标记序列,每个标记由指向的字符串中的字符分隔   s2 [....]

因此,在您的情况下,如果您想使用=+-*/中的任意标记来标记输入字符串,则应使用类似

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

注意:正如评论中BLUEPIXY所述,请注意,

  

使用这些功能时要小心。如果您确实使用它们,请注意:这些函数会修改它们的第一个参数。这些函数不能用于常量字符串。分隔字节的标识将丢失。

另一种替代方法是,如果你在数学语句中计算运算符的数量,只需循环遍历数组并使用isdigit() / isspace() t0找出非数字条目并更新柜台。

答案 1 :(得分:3)

你可以在字符串

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