字符串解析

解析字符串

一:

int parse_string(int* argc, char* argv[], char* buf)
{
        char*   find = buf;
        int     i = 0;
        int     k = 0;
        int     state = 0;

        for ( i=0; (*(find+i) != '\0') && (*(find+i) != '\n'); i++) {
                if ( (*(find+i) != ' ' && *(find+i) != '\t') && state == 0 ) { 
                        argv[k++] = find+i;
                        state = 1;
                } else if( (*(find+i)==' ' || *(find+i)=='\t' || *(find+i)=='\n') && state == 1) {
                        *(find+i) = '\0';
                        state = 0;
                }   
        }   
        argv[k] = NULL;
        *argc = k;
        return k+1;
}

二:识别IP地址格式

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

/**
 * Return : 0: OK  , <0: Failed
 */
int ipatoi(char* ip, int n)
{
	char	buf[4] = {0};	
	int	i = 0;
	int	num = 0;

	if(n == 0 || n > 3)	
		return -1;
	for(i = 0; i < n; i++){
		if(ip[i] < '0' || ip[i] > '9')
			return -2;
	}
	memcpy(buf, ip, n);	
	num = atoi(buf);
	if(num < 0 || num > 255)
		return -3;
	return 0;
}
/**
 * Return : 0: OK  , <0: Failed
 */
int Is_ip(char* buf)
{
        char*   start = buf;
	char*	end = NULL;
        int     i = 0;

	if(*buf == ' ' || *buf == '\t')			//前面的空格
		return -1;
	for(i = 0; i < 4; i++){
		end = start;
		while(*end != '.' && *end != ' ' && *end != '\t' && *end != '\0' && *end != '\n'){
			end++;
		}
		if(ipatoi(start, end-start)){
			return -2;	
		}
		if(*end == '.')
			start = end+1;
		else
			break;
	}
	if(i != 3 )		//检验出的段数
		return -3;
	if(*end != '\0')
		return -4;
        return 0;
}

再提供一种思路,对要检测的字符串做个修改,以利于检测。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值