如何检查输入是否有效-通过比较C中的字符串

如何检查输入是否有效-通过比较C中的字符串,c,string,function,C,String,Function,我正在做一个calc函数,用来检查输入是否有效。因此,我将有两个字符串,一个包含用户输入的内容(例如,3+2-1或可能是dog-这将是无效的),另一个包含存储在字符串中的允许字符,例如“123456789/*-+。^” 我不知道如何才能做到这一点,但在启动时遇到了困难。我知道一些函数,比如STRMCP,以及string.h文件中流行的函数,但是我不知道如何使用它们来检查每个输入 最简单的方法是什么?一种方法如下 字符串是ascii码的数组。所以如果你的字符串是 char formula[50];

我正在做一个calc函数,用来检查输入是否有效。因此,我将有两个字符串,一个包含用户输入的内容(例如,3+2-1或可能是dog-这将是无效的),另一个包含存储在字符串中的允许字符,例如“123456789/*-+。^”

我不知道如何才能做到这一点,但在启动时遇到了困难。我知道一些函数,比如STRMCP,以及string.h文件中流行的函数,但是我不知道如何使用它们来检查每个输入


最简单的方法是什么?

一种方法如下

字符串是ascii码的数组。所以如果你的字符串是

char formula[50];
然后你有一个循环

int n =0;

while (formula[n]!=0)
  {
     if ( (formula[n]<........<<your code here>>  ))
       {printf("invalid entry\n\n"); return -1; //-1 = error code
     n++;
  }
int n=0;
while(公式[n]!=0)
{

如果((公式[n]这里演示如何使用
strpbrk()
检查字符串中的所有字符是否在所选集合中:

#include <string.h>
#include <stdio.h>

const char alphabet[] = "123456789/*+-=.^";

int main(void) {
  const char a[] = "3+2-1";
  const char b[] = "dog";

  char *res = strpbrk(a, alphabet);
  printf("%s %s\n", a, (res) ? "true" : "false");

  res = strpbrk(b, alphabet);
  printf("%s %s\n", b, (res) ? "true" : "false");

  return 0;
}
#包括
#包括
常量字符字母表[]=“123456789/*+-=.^”;
内部主(空){
常量字符a[]=“3+2-1”;
常量字符b[]=“狗”;
char*res=strpbrk(a,字母表);
printf(“%s%s\n”,a,(res)?“true”:“false”);
res=strpbrk(b,字母表);
printf(“%s%s\n”,b,(res)?“真”:“假”);
返回0;
}
这不是最快的方法,但它很容易使用


但是,如果您正在编写计算器函数,则确实需要同时解析字符串。典型的策略是使用两种类型的实体-运算符(
+-/*^
)和操作数(数字,因此
-0.1
.0002
42
,等等)。您将在解析字符串时从字符串中提取这些字符串,如果遇到无效字符,则会失败。(如果需要处理括号,则需要一个堆栈进行解析…,并且可能需要使用堆栈来处理和计算整个表达式。)

您的问题很清楚,但您需要展示您迄今为止所做的尝试。我建议您阅读有关该函数的内容。您有3个问题:1)字符的有效性。仅表示数字和运算符。2)输入字符的顺序。这意味着不能有1+2*+5 3)计算本身。这意味着在计算中保留算术优先级。这是通过使用堆栈并将字符按前置顺序排序来实现的,其中运算符放在下两个操作数之前。(搜索计算器实现。)“我不知道如何使用它们”你读过文档了吗?你是在问如何使用函数(到底是哪些函数?),如何解析用户输入,还是问解决问题的代码?我觉得你的问题有点太广泛了。