检查变量是否为C中的字符串或整数

时间:2015-10-02 18:03:34

标签: c

我正在编写一个C程序,我必须通过命令行读取参数。 如何检查传递给我的程序的参数是一个字符串(也就是一个字符数组)或整数? 我可以在C中立即拨打电话吗?

4 个答案:

答案 0 :(得分:3)

你可以在字符串的每个字符上调用isdigit(),如果对于所有字符都是真的,你有一个整数,否则它是一些字母数字字符串。

您也可以调用strtol将字符串解析为整数。第二个参数返回指向字符串中第一个非数字字符的指针。如果它指向第一个字符,则它不是整数。如果它指向结尾,那么它是一个整数。如果它指向中间的某个位置,则它是一个整数,后跟一系列非数字字符。

答案 1 :(得分:0)

  

如何检查传递给我程序的参数是字符串(也就是字符数组)还是整数?

命令行参数始终作为字符串传递给C程序。由你决定一个参数是否代表一个数字。

int is_number(char const* arg)
{
   // Add the logic to check whether arg is a number
   // The code here can be simple or complex depending on the 
   // level of checking that is necessary.
   // Should we return true or false if the argument is "1abc"?

   // This is a very simple test.
   int n;
   return (sscanf(arg, "%d", &n) == 1);
}

int main(int argc, char** argv) // argv is array of strings.
{
   int i = 0;
   for ( i = 1; i < argc; ++i )
   {
      if ( is_number(argv[i]) )
      {
         // Use the argument.
      }
   }
}

答案 2 :(得分:0)

命令行传递的参数总是字符串,如果要检查此字符串是否可以转换为整数,可以使用strtol

char *ptr = argv[1];
long num;

num = strtol(ptr, &ptr, 10);
if (*ptr == '\0')
    /* arg is a number */
else
    /* arg is NOT a number */

答案 3 :(得分:0)

您可以尝试检查所有字符串字符是否都在0-9的数字范围内。例如,检查此程序:

#include <stdio.h>

int checkString(char *Str)
{
    char *ptr = Str;

    while( *ptr )
    {
        // check if string characters are within the range of numbers

        if( ! (*ptr >= 0x30 && *ptr <= 0x39 ) )
        {
            return 0;
        }
        ptr++;
    }

    return 1;
}

int main(int argc,char *argv[])
{
    // does argv[1] consist entirely of numbers ?

    if( checkString(argv[1]) )
    {
        /* if it does , do something */
        puts("success");
    }
    else
    {
        /* do something else */
    }

    return 0;
}