`

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;
}

 

分享到:
评论

相关推荐

    string.h的函数大全

    在C++编程语言中,`&lt;string.h&gt;`头文件是C标准库的一部分,它提供了处理C风格字符串(字符数组)的一系列函数。虽然在C++中我们通常使用`std::string`类来处理字符串,但了解`&lt;string.h&gt;`中的函数仍然很重要,特别是...

    字符串函数string.h应用举例.zip

    在C语言中,`&lt;string.h&gt;` 是一个非常重要的头文件,它包含了处理字符串的各种函数。这个压缩包“字符串函数string.h应用举例.zip”显然提供了一些示例代码和相关资源,帮助我们理解如何在实际编程中应用这些函数。让...

    C语言38:字符串函数string.h应用举例.rar

    在C语言中,`&lt;string.h&gt;` 是一个非常重要的头文件,它包含了处理字符串的一系列函数。本教程将深入探讨 `string.h` 中的一些关键函数及其应用实例。 首先,我们来了解一下什么是字符串。在C语言中,字符串是字符...

    C_string.h库文件

    总之,"C_string.h"库文件是C++早期处理字符串的基础,它的函数在许多旧项目和特定环境中仍被广泛使用。了解和掌握这些函数的使用方法,对于理解C++的历史和开发过程具有深远意义,同时也能帮助我们更好地理解和对比...

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

    在C/C++编程中,`strtok`函数是一种常用的字符串处理工具,用于将字符串分割成多个子串。这个函数在处理复杂格式的数据时非常有用,比如解析包含多种数据类型的字符串。在给定的场景中,我们需要从一个字符串中提取...

    C语言基础面试题(03-字符串函数).docx

    下面我们将深入探讨一些基于`string.h`库的常用字符串函数,并提供一些问题的解决方案。 1. **字符串函数** - `strlen`: 计算字符串的长度,不包括结束的空字符`\0`。 - `strcpy`: 复制一个字符串到另一个字符串...

    C和C++常用字符串处理函数.pdf

    `strtok`函数用于将字符串`s`分解成一系列的片段,使用`delim`指定的分隔符进行切割。首次调用时,`s`应包含待分割的字符串;后续调用时,`s`应设为`NULL`。每次调用成功,返回指向新片段的指针,直到找不到分隔符...

    C语言库函数之字符串

    5. **`strtok`: 字符串分隔函数** - **函数原型**: ```c char *strtok(char *s1, const char *s2); ``` - **头文件**: `&lt;string.h&gt;` - **功能**: 使用字符串`s2`作为分隔符来分割字符串`s1`。 - **返回值**: ...

    字符串按指定的字符串进行分隔

    `strtok`函数是C标准库中的一个函数,用于将字符串按照指定的分隔符进行切割。它的基本用法如下: ```cpp char *strtok(char *str, const char *delim); ``` 这里的`str`是原始字符串,`delim`是分隔符字符串。`...

    Arduino 分割字符串库,strFenGe.rar

    另外,还可以使用 `char*` 和 `strtok()` 函数从 C 标准库中进行字符串分割,但这可能需要更多的编程技巧。 总之,`strFenGe` 库为 Arduino 用户提供了一种便捷的方式来处理分隔符分割字符串的任务,降低了编写复杂...

    字符串处理函数

    strtok 函数可以将字符串分解成多个子字符串,strtok 分解 s1 字符串为用特定分隔符分隔的多个字符串。 strupr 函数可以将字符串中的所有字符变为大写,strupr 将字符串 s 中的字符变为大写。 strlwr 函数可以将...

    一个C语言常用字符串操作函数库.zip

    C语言本身并不像其他高级语言那样内置了丰富的字符串处理函数,但通过标准库中的`string.h`,我们可以获得一系列实用的字符串操作函数。本资源"一个C语言常用字符串操作函数库.zip"提供了一套关于C语言字符串操作的...

    字符串相关函数介绍

    在C语言和许多其他编程语言中,有一系列专门用于处理字符串的函数,这些函数可以帮助我们高效地完成各种字符串操作。本篇文章将详细介绍一下三个重要的字符串相关函数:`strchr`、`strstr`以及`strtok`。 1. `...

    C语言字符串操作函数.doc

    - `strtok()`:分隔字符串,返回一系列子串。 了解并熟练掌握这些字符串操作函数,对于编写高效且安全的C语言程序至关重要。在实际编程中,应始终考虑潜在的安全风险,如缓冲区溢出,合理使用这些函数并进行边界...

    c字符串操作函数示例(很全面)

    9. `strtok()` 函数:用于分隔字符串。它可以在字符串中查找指定的分隔符,并返回一个指向第一个分隔符之后的字符的指针。例如: ```c char str[] = "apple,banana,orange"; char *token = strtok(str, ","); while ...

    c语言字符串函数

    6. `strtok()` 函数:用于分隔字符串。它会根据指定的分隔符切割字符串并返回一个指向下一个子串的指针。例如: ```c char str[] = "apple,banana,grape"; char *token; token = strtok(str, ","); while (token != ...

    c语言字符串总结,感兴趣同学下载

    在C语言中,有多种内置的字符串处理函数,这些函数在`&lt;string.h&gt;`库中定义。压缩包中的"C字符串函数总汇 - wrq147的专栏 - CSDN博客.mht"和"C语言-字符串函数大全和详解.txt"提供了详细清单和解释。 - `strlen()...

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

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

    在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。(C语言)

    1. **字符串处理函数**:C语言提供了若干内置的字符串处理函数,如`strlen()`用于计算字符串的长度(不包括结束的`\0`),`strtok()`用于按指定分隔符分割字符串。在这个问题中,我们可以用`strtok()`来分割单词。 ...

Global site tag (gtag.js) - Google Analytics