如何检查输入是否有效-通过比较C中的字符串
我正在做一个calc函数,用来检查输入是否有效。因此,我将有两个字符串,一个包含用户输入的内容(例如,3+2-1或可能是dog-这将是无效的),另一个包含存储在字符串中的允许字符,例如“123456789/*-+。^” 我不知道如何才能做到这一点,但在启动时遇到了困难。我知道一些函数,比如STRMCP,以及string.h文件中流行的函数,但是我不知道如何使用它们来检查每个输入如何检查输入是否有效-通过比较C中的字符串,c,string,function,C,String,Function,我正在做一个calc函数,用来检查输入是否有效。因此,我将有两个字符串,一个包含用户输入的内容(例如,3+2-1或可能是dog-这将是无效的),另一个包含存储在字符串中的允许字符,例如“123456789/*-+。^” 我不知道如何才能做到这一点,但在启动时遇到了困难。我知道一些函数,比如STRMCP,以及string.h文件中流行的函数,但是我不知道如何使用它们来检查每个输入 最简单的方法是什么?一种方法如下 字符串是ascii码的数组。所以如果你的字符串是 char formula[50];
最简单的方法是什么?一种方法如下 字符串是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)计算本身。这意味着在计算中保留算术优先级。这是通过使用堆栈并将字符按前置顺序排序来实现的,其中运算符放在下两个操作数之前。(搜索计算器实现。)“我不知道如何使用它们”你读过文档了吗?你是在问如何使用函数(到底是哪些函数?),如何解析用户输入,还是问解决问题的代码?我觉得你的问题有点太广泛了。