c语言字符串处理函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言字符串处理函数
一、函数
1、字符串的长度strlen()
说明:
返回s的长度,不包括结束符NULL。strlen(char*)函数求的是字符的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。
与sizeof()的区别:
A、char ss[10]="";
sizeof(ss) = 10;
strlen(ss) = 0;
B、char *aa = "asd";
sizeof(aa) = 4;
strlen(aa) = 3;
C、sizeof是在编译期间计算其值;
Strlen在运行期间计算返回值
D、sizeof是操作符(关键字),strlen是函数。
E、.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
F、当适用了于一个结构类型时或变量,sizeof 返回实际的大小,
当适用一静态地空间数组,sizeof 归还全部数组的尺寸。
sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸
自定义strlen()
int strlen(const char *str)
{
assert(str != NULL);
int len = 0;
while((*str++) != '\0')
len++;
return len;
}
2、比较字符串大小函数
区分大小写:strcmp()
(1)函数原型:int strcmp(char*str1,char*str2);
函数说明:通过比较字串中各个字符的ASCII码,来比较参数Str1和Str2字符串,比较时考虑字符的大小写。
返回值:比较字符串str1和str2的大小,如果str1小于str2,返回值就<0,反之如果str1大于str2,返回值就>0,如果str1等于str2,返回值就=0,
自定义实现:
int strcmp (char* a,char* b)
{
int k=0;
for( ; a[k] && b[k] && (a[k]==b[k]) ; k++);
return(a[k]-b[k]);
}
strncmp()
(2) 函数原型:int strncmp(char *str1, char *str2, int maxlen);
函数说明:比较字符串str1和str2的前maxlen个字符
返回值:比较字符串str1和str2的大小,
如果str1小于str2,返回值就<0;
反之如果str1大于str2,返回值就>0;
如果str1等于str2,返回值就=0;
maxlen指的是str1与str2的比较的字符数。
自定义实现:
int strncmp(char *str1, char *str2, int maxlen)
{
if (maxlen == 0)
{
return 0;
}
int k=0;
for (;str1[k]&&str2[k]&&(str1[k]==str2[k])&&(k ; return str1[k] - str2[k]; } 不区分大小写: 1)忽略大小写---strcasecmp 函数原型:int strcasecmp (const char *s1, const char *s2); 函数说明:用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异 2)忽略大小写—stricmp 函数原型:int stricmp(char *str1, char *str2); 函数说明:以大小写不敏感方式比较两个串 3)比较一部分—strncmpi 函数原型:int strncmpi(char *str1, char *str2, unsigned maxlen); 函数说明:比较字符串str1和str2的前maxlen个字符 5)内存区域比较---memcmp 函数原型:int memcmp(void*buf1,void *buf2,unsigned int count) 函数说明:比较内存区域buf1和buf2的前count个字节。Void*是指任何类型的指针。 6)内存区域部分比较-- memicmp Void*是指任何类型的指针。 函数原型:int memicmp(void*buf1,void *buf2,unsigned int count) 函数说明:比较内存区域buf1和buf2的前count个字节,但不区分大小写。 以上比较函数的返回值: 若参数1中字符串和参数中2字符串相同则返回0; 若参数1中字符串长度大于参数2中字符串长度则返回大于0 的值; 若参数1中字符串长度小于参数2中字符串长度则返回小于0的值。 3、从字符串中提取子串 1)提取子串—strstr (这个实现传说很复杂) 函数原型:char* strstr(char*src,char*find) 函数说明:从字符串src中寻找find第一次出现的位置(不比较结束符NULL) 返回值:返回指向第一次出现find位置的指针,如果没有找到则返回NULL 2)提取分隔符间字串—strtok 函数原型:char *strtok(char *s, char *delim); 函数说明:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。 首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。strtok在s中查找包含在delim中的字符并用NULL('')来替换,直到找遍整个字符串。 返回值:从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点 举例: #include char *p; p=strtok(s,d);