【问题标题】:I need to read all integers, mathematical operators, and characters in a string我需要读取字符串中的所有整数、数学运算符和字符
【发布时间】:2012-10-08 05:25:37
【问题描述】:

我有一个字符串,它可能包含0-9 或数学运算符(+, -, *, /) 之间的单个整数。

基本上,我需要读入所有字符/数字。我正在检查字符是 +、-、* 还是 /。如果不是,那么我知道它要么是数字,要么是无效字符。我正在使用 atoi 将其转换为整数。 atoi 在两种情况下都将返回 0:如果整数是 0 或如果它是无效字符。

我还能如何区分?

【问题讨论】:

  • 如果您正在处理一位整数,您可以使用isdigit() 来验证它是否是一个数字,如果它既不是数字也不是您的运算符之一(也不是空格,但您可以使用" %c" 格式跳过那些——前导空格跳过空白),那么这是一个错误。如果只有一个字符,atoi()strtol() 之类的函数可能会过大。
  • 你可以直接先检查是不是。

标签: c parsing char int atoi


【解决方案1】:

在使用 atoi 之前用标准的 isdigit() 函数检查每个字符

【讨论】:

  • 为什么我忘记了isdigit 的存在?非常感谢!
【解决方案2】:

使用strtol 执行错误检测。

【讨论】:

    【解决方案3】:
    int main (void)
    {
        int i, j ;
        char num_string[] = "1 234 23 45" ;
        char tmp [2] = {'\0', '\0'} ;
        int length = strlen (num_string) ;
        int* values = (int*) malloc (sizeof (int) * length) ;
        for ( i = 0, j = 0; i < length; ++i)
        {
            if ( isdigit (num_string[i] ) )
            {
                tmp [0] = num_string [i] ;
                values [j++] = atoi (tmp) ;
            }
        }
        printf ("\nThe string: %s", num_string) ;
        printf ("\nThe integer array which results is: ") ;
        for ( i = 0; i < j; ++i)
            printf (" %d ", values[i]) ;
        return 0 ;
    }
    

    输入: 1 22 33 4 555

    输出: 1 2 2 3 3 4 5 5 5

    【讨论】:

      猜你喜欢
      • 2013-02-16
      • 1970-01-01
      • 2020-04-18
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多