我有一个char
数组,我想在其中循环,其中除以所有数学运算,
例如,现在我只关注=
符号,所以
for (char *p = strtok(data,"="); p != NULL; p = strtok(NULL, " "))
{
numberOfChars++;
}
我想循环不仅"="
是令牌,而且它也可能是其中之一:+,-,*,\,=
这样我们就为每一个循环增加numberOfChars
。
因此:a = b + c
我们将获得 3 。
答案 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++;
}
}