【问题标题】:How to check if input in valid - by comparing strings in C如何检查输入是否有效 - 通过比较 C 中的字符串
【发布时间】:2015-12-03 20:17:00
【问题描述】:

我正在制作一个 calc 函数,用于检查输入是否有效。因此,我将有 2 个字符串,一个带有用户输入的内容(例如,3+2-1 或者可能是 dog - 这将是无效的),另一个带有存储在字符串中的 ALLOWED 字符,例如 '123456789/*- +.^' .

我不知道如何才能做到这一点并且无法启动它。我知道一些函数,例如 STRMCP,以及 string.h 文件中流行的函数,但我不知道如何使用它们来检查每个输入。

最简单的方法是什么?

【问题讨论】:

  • 你的问题很清楚,但你需要展示你到目前为止所做的尝试。
  • 我推荐你阅读strpbrk函数。
  • 您的盘子上有 3 个问题:1) 字符的有效性。仅表示数字和运算符。 2) 输入字符的顺序。意味着你不能有 1+2*+5 3) 计算本身。意味着在计算中保留算术优先级。这是通过使用 Stack 并按预先顺序对字符进行排序来实现的,其中运算符放置在接下来的 2 个操作数之前。 (搜索计算器实现。)
  • 我不知道如何使用它们”你看过文档了吗?
  • 您是在询问如何使用这些功能(到底是哪些功能?),如何解析用户输入,或者寻找解决您问题的代码?我觉得你的问题有点太笼统了。

标签: c string function


【解决方案1】:

一种处理方式如下。

字符串是一个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++;
  }

您需要将逻辑放入循环中,但是您可以使用此循环测试每个字符的 ascii 代码。

可能有一种更优雅的方法来解决这个问题,但是如果你在这里放置正确的条件语句来检查每个字符的 ascii 代码,这将起作用。

while 语句检查你是否到达了字符串的末尾。

【讨论】:

    【解决方案2】:

    这里演示了如何使用 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;
    }
    

    这不是最快的方法,但很容易使用。

    但是,如果您正在编写一个计算器函数,您确实希望同时解析字符串。一个典型的策略是拥有两种类型的实体 - 运算符 (+-/*^) 和操作数(数字,如 -0.1.000242 等)。您将在解析字符串时从字符串中提取这些内容,如果您遇到无效字符,则会失败。 (如果您需要处理括号,则需要一个用于解析的堆栈......而且您可能无论如何都需要使用一个堆栈来处理和评估整个表达式。)

    【讨论】:

      猜你喜欢
      • 2020-03-25
      • 2018-09-04
      • 2020-10-16
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2017-11-03
      • 2014-03-15
      • 2017-01-25
      相关资源
      最近更新 更多