`

string.h(二)C的字符串分隔函数strtok()

 
阅读更多

 

char *strtok(char *str1, char *str2); 

strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串(此时返回分割符前面的字符串),往后的调用则将参数s设置成NULL(返回分隔符后的字符串)。每次调用成功则返回被分割出片段的指针,当没有被分割的串时则返回NULL。

 

注意:会忽略掉连续的分隔符

下面程序输出为:

[abc]

[d]

 

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

int main(void){
	//如果有连续的分隔符,则会被忽略掉
	char input[]="abc,,d,,";
	char *p;
	p=strtok(input, ",");
	if(p)
		printf("[%s]\n", p);

	p=strtok(NULL, ",");
	if(p)
		printf("[%s]\n", p);

	p=strtok(NULL, ",");
	if(p)
		printf("[%s]\n", p);

	while(1){}
	return 0;
}

 

举例:IP合法性

详细描述:

请实现如下接口

boolisIPAddressValid(constcharpszIPAddr)

输入:pszIPAddr 字符串

输出:true 有效的IP地址,false,无效的IP地址

 

约束

1. 输入IP为XXX.XXX.XXX.XXX格式

2. 字符串两端含有空格认为是合法IP

3. 字符串中间含有空格认为是不合法IP

4. 类似于 01.1.1.1, 1.02.3.4  IP子段以0开头为不合法IP

5. 子段为单个0 认为是合法IP,0.0.0.0也算合法IP

<!--EndFragment-->

 

#include "IPAddressValid.h"
#include <stdio.h>
#include <string.h>
#include <string>


//对每个字段进行检查
bool check_token(char *token){
	//printf("token[%s]\n", token);
	if(token==NULL || token=="")
		return false;

	//0开头又不是单个0的认为不合法
	int token_len=strlen(token);
	if(token_len>=2 && *token=='0'){
		return false;
	}

	//必须在0~255
	int i=atoi(token);
	if(i<0 || i>255)
		return false;
	
	return true;
	
}

bool isIPAddressValid(const char* pszIPAddr)
{
    // 请在此处实现
	if(pszIPAddr==NULL){
		return false;
	}

	char *pszIPAddr2=const_cast<char *>(pszIPAddr);

	
	//去掉首尾空格pIP[0 ... pIpLen)
	int len=strlen(pszIPAddr);
	int preBlankNum=0;
	int postBlankNum=0;
	
	char *p=NULL;
	p=pszIPAddr2;
	while(*p==' '){
		preBlankNum++;
		++p;
	}

	p=pszIPAddr2+len-1;
	while(p>=pszIPAddr2 && *p==' '){
		postBlankNum++;
		--p;
	}

	char *pIP=NULL;
	int pIpLen=len-preBlankNum-postBlankNum;
	pIP=(char *)malloc(sizeof(char)*(pIpLen+1));
	for(int i=0;i<pIpLen;i++){
		*(pIP+i)=*(pszIPAddr+i+preBlankNum);
	}
	*(pIP+pIpLen)='\0';
	//printf("--->[%s]\n", pIP);

	if( *pIP=='.' || *(pIP+pIpLen-1)=='.')
		return false;

	//字符串中间含有空格认为是不合法IP,并且为.或者数字
	for(int i=0;i<pIpLen;i++){
		if( !(*(pIP+i)>='0'&& *(pIP+i)<='9') && !(*(pIP+i)=='.') ){
			return false;
		}
	}

	//用.来split字符串
	char *delim=".";
	char *token=NULL;

	int token_num=0;

	token=strtok(pIP, delim);
	if(token!=NULL){
		token_num++;

		bool flag=check_token(token);
		if(flag==false)
			return false;
	}

	while(token!=NULL){
		token=strtok(NULL, delim);
		printf("[%s] ", token);

		if(token!=NULL){
			token_num++;
			bool flag=check_token(token);
			if(flag==false)
				return false;
		}
	}

	if(token_num!=4)
		return false;

    return true;
}

 

分享到:
评论

相关推荐

    c语言字符串分割函数strtok

    这个例子从文本文件ad9361.txt一行一行读取数据,通过spi设置寄存器值。支持命令读写:spidev_test -r F1 -w A0,-r参数表示寄存器地址,-w表示要写入的值,均为16进制(不要加0x开头)

    C++字符串分割函数+VC助手

    C++字符串分割源码,破解版VC助手,兼容多个windows版本

    C++的字符串分割函数的使用详解

    一、用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数说明:str为要分解的字符串,delim为分隔符字符串。 返回值:从str开头开始的一个个被...

    C语言分隔字符串函数接口strsep

    C语言分隔字符串函数接口strsep int strsep(char* line, char* lines[MAXSUBSTR], char* delim) 利用strtok实现

    如何使用PHP中的字符串函数

    这些是常用的字符串操作函数,有些和C中的同名函数意义完全一致. strrev是把一个字符串翻转. strtolower和strtoupper的意思应该不用解释了. ucfirst是把字符串的第一个字符变成大写. substr是返回字符串的一个...

    C++常用字符串分割方法实例汇总

    一、用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数说明:str为要分解的字符串,delim为分隔符字符串。 返回值:从str开头开始的一个个被...

    字符串相关函数介绍

    字符串相关函数介绍,strchr ,strstr,strtok

    C语言中计算字符串长度与分割字符串的方法

    C语言strlen()函数:返回字符串的长度 头文件: #include &lt;string&gt; strlen()函数用来计算字符串的长度,其原型为: unsigned int strlen (char *s); 【参数说明】s为指定的字符串。 strlen()用来计算指定的...

    strtok函数的用法 strtok函数的用法

    strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok...

    c语言中字符串分割函数及实现方法

    1、问题引入 自己在写一个linux下的模拟执行指令...2、自己写的字符串分割函数:用于分割指令,比如cat a.c最后会被分割成cat和a.c两个字符串、mv a.c b.c最后会被分割成mv和a.c和b.c三个字符串。 具体实现如下: #inc

    使用一个字符串分割另一个字符串

    * @param delimiter 边界上的分隔字符 * @param haystack 输入的字符串 * @param out 输出的字符串指针 * @return 分割成了多少个成员 */ int explode(char *delimiter, char *haystack, char *out[]) { int ...

    C++ 字符串截取(strtok)

    C++字符串截取,例如:"adda,dagf,dfa,df",将','去除,将每部分字符出入一个指定数组

    C语言字符串各函数-具体实现

    strcpy,strncpy,strcat,strncat,strcmp,strncmp,strchr,strnchr,strlen,strnlen,strspn,strpbrk,strtok,strsep,memset,bcopy,memcpy,memmove,memcmp,memscan,strstr,memchr....对理解C语言和C编程有很大帮助。

    C字符串函数对应的C++ string操作详解

    string是STL里的标准类,习惯了使用指针操作C的char *字符串,刚开始并不是很适应,主要原因是对string.h里的函数没有找到合适的C++替换方法,因此,对常用的sring.h里的函数替换说明如下: strcpy: str.substr() ...

    C语言切割多层字符串(strtok_r strtok使用方法)

    主要介绍了C语言切割多层字符串的方法,说了strtok的弱点,使用strtok_r的方法

    c语言 字符串的拼接和分割实例

    1.字符串的拼接 使用c的函数char *strcat(char *str_des, char *str_sou); 将字符串str_sou接在字符串str_des后面(放在str_des的最后字符和“\0”之间)。...(input:字符串,a:分隔符); 之后调用: temp

    使用strtok函数截取字符串得到相应的子串存入数组中

    原字符串中包含浮点数、逗号、字符串、整数,长整型数等,本程序实现的是取出其中的浮点数和长整型数

    字符串函数大全.pdf

    主要介绍 strcpy(),strncpy(), strcat(), strncat(), strcmp(), strncmp(), strchar(), strrchr(), strspn(), strcspn(), strpbrk(), strstr(), strlen(), strerror(), strtok()等。

    使用分隔符解析字符串:这两个函数基于一个或多个分隔符解析字符串或字符串元胞数组。-matlab开发

    这两个函数根据一个或多个分隔符解析字符串(字符数组)或字符串元胞数组。 我将它设计为 strtok.m 的替代品,因为它作为字符串解析函数不符合我的期望或要求。 这些功能无疑需要进一步增强和改进,因此欢迎您提出...

Global site tag (gtag.js) - Google Analytics