1. 程式人生 > >判斷輸入的字串是否為ip地址

判斷輸入的字串是否為ip地址

首先給出一個c函式的原型:int sscanf(const char *buffer,const char *format,[argument ]...)它的返回值是引數的資料,也就是argument的個數,buffer:儲存的資料,format:格式控制字串,argument:選擇性設定字串。這個程式從標準流讀取資料,可以進行無限制的輸入。下面貼出程式碼,然後引出另外一個問題,將字串ip轉換成整形ip地址。

#include<stdio.h>
#include<string.h>
int main(void)
{
        char str[32];
        int a,b,c,d;
        int ret=0;
        while(fgets(str,sizeof(str),stdin)!=NULL)
        {
                int len=strlen(str);
                str[len]='\0';//因為fgets會吃進回車符號,所以要將回車符號去掉
                ret=sscanf(str,"%d.%d.%d.%d",&a,&b,&c,&d);
                if(ret==4&&(a>=0&&a<=255)&&(b>=0&&b<=255)&&(c>=0&&c<=255)&&(d>=0&&d<=255))
                {
                        printf("it is ip!\n");
                }
                else
                        printf("it is not ip!\n");
        }
        return 0;
}

gcc -Wall ip.c -o ip

12.3.4.5

it is a ip!

下面來引出另外一個問題,在很多情況下,要求把字串ip轉換成整形ip,這個問題也可以應用sscanf這個函式,首先把四個欄位儲存到a,b,c,d四個變數當中去,然後進行移位運算,因為ip地址是32位的,而且是無符號整形變數,所以可以應用unsigned int 來儲存. unsinged int ip=(a<<24)+(b<<16)+(c<<8)+d。