字符串的题目 用库函数往往能大大简化代码量
介绍几个常用的C的字符串处理库函数
strtok()
原型
char *strtok(char s[], const char *delim);
功能
分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。
- 例如:
strtok("abc,def,ghi",",")
,最后可以分割成为abc def ghi.尤其在点分十进制的IP中提取应用较多。
- 注意delim里面的不能看成一个整体,
- 比如
s='bba',delim='ab'
最后结果为NULL
奉劝最好只有一个字符做参数 ,中间过程不改变参数。否则可读性很差;
说明
strtok()
用来将字符串分割成一个个片段。- 参数s指向欲分割的字符串。
- 参数
delim
则为分割字符串中包含的所有字符。 - 当
strtok()
在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0
字符。 - 在第一次调用时,
strtok()
必需给予参数s
字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。
示例代码
#include<stdio.h>
int main(void)
{
charinput[16]="abc,d";
char*p;
p=strtok(input,",");
if(p) printf("%s\n",p);
p=strtok(NULL,",");
if(p) printf("%s\n",p);
return 0;
}
atoi()
功能
把字符串转换成整型数。ASCII to integer
的缩写。
说明
参数nptr
字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换- 之后检测到非数字(包括结束符
\0
),字符时停止转换,返回整型数。否则,返回零。
还有 转换为浮点数的atof()
,其余的strtod()
strtold()
strtol()
strchr()
函数原型
char *strchr(const char* _Str,int _Val)
char *strchr(char* _Str,int _Ch)
说明
- 查找字符串s中首次出现字符c的位置
- 返回首次出现c的位置的指针,返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置,如果s中不存在c则返回NULL。
sscanf()
函数原型
int sscanf(const char *buffer,const char *format,[argument ]...);
buffer
: 存储的数据format
: 格式控制字符串argument
: 选择性设定字符串sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里。
支持正则表达式
用法
常见用法。
charbuf[512]; sscanf("123456","%s",buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中! printf("%s\n",buf);
带正则表达式用法
给定一个字符串
iios/12DDWDFF@122
,获取 / 和 @ 之间的字符串sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]",buf); printf("%s\n",buf);