解析字符串
一:
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;
}
再提供一种思路,对要检测的字符串做个修改,以利于检测。