cc++字符串操作函数及⽤法详解1.strlen()函数
1. 函数声明原型:
2. 函数功能:
计算指定的字符串string的长度。
strlen函数实现:
size_t strlen(const char *string);
size_t my_strlen1(const char* string)
{
assert(string);
size_t count = 0;
while (*string++)
{
count++;
}
return count;
}
size_t my_strlen2(const char* string)
{
assert(string);
if (*string == '\0')
return 0;
return 1 + my_strlen2(string + 1);
}
int main()
{
char s[] = "abcdefg";
printf("%d\n", my_strlen2(s));
system("pause");
return 0;
}
2.strcpy函数
原型:strcpy(str1,str2);
功能:将字符串str2复制到字符串str1中,并覆盖str1原始字符串,可以⽤来为字符串变量赋值
返回:str1
注意:1)字符串str2会覆盖str1中的全部字符,2)字符串str2的长度不能超过str1
char* my_strcpy(char* dest, const char* src)
{
assert(dest);
assert(src);
char* ptr = dest;
while (*src)
{
*dest++ = *src++;
}
*dest = *src;
return ptr;
}
int main()
{
char s1[] = "abefg";
char s2[] = "cdefg";
printf("%s\n", my_strcpy(s1, s2));
system("pause");
return 0;
}
3.strncpy函数
原型:strncpy(str1,str2,n);
功能:将字符串str2中的前n个字符复制到字符串str1的前n个字符中
返回:str1
注意:1)不会清除str1中全部字符串,只会改变前n个字符串,2)n不能⼤于字符串str1、str2的长度. char str1[] = "We are csdn!";
char str2[] = "Hello!";
strncpy(str1, str2, 3);
printf("str1 = %s\n", str1); //str1 = Helare csdn!
4.strcat函数
原型:strcat(str1,str2);
功能:将字符串str2添加到字符串str1的尾部,也就是拼接两个字符串
原型2:strncat(str1,str2,n);
功能2:将字符串str2的前n个字符添加到字符串str1的尾部
返回:str1
注意:拼接之后的长度不能超过字符串数组str1的长度
#include<stdio.h>
#include<string.h>
int main()
{
c++中string的用法char str1[20] = "We are csdn!";
char str2[] = "Hello!";
printf("%d\n",strlen(str1)); // 输出 12
printf("%d\n",sizeof(str1)); // 20
strcat(str1, str2);
printf("str1 = %s\n", str1); //str1 = We are csdn!Hello!
printf("%d\n",strlen(str1)); // 18
printf("%d\n",sizeof(str1)); // 20
}
5.strcmp函数
原型:strcmp(str1,str2);
功能:⽐较两个字符串,如果两个字符串相等,则返回0;
若str1⼤于str2(对于⼤于的理解,是指从两个字符串的第⼀个字符开始⽐较,若两个字符相同,则继续⽐较,若发现两个字符不相等,且str1中该字符的ASCII码⼤于str2中的,则表⽰str1⼤于str2),返回⼀个正数(这个正数不⼀定是1);
若str1⼩于str2,返回⼀个负数(不⼀定是-1);
若字符串str1的长度⼤于str2,且str2的字符与str1前⾯的字符相同,则也相当于 str1⼤于str2处理
原型2:strncmp(str1,str2,n);
功能2:⽐较两个字符串的前n个字符
原型3:stricmp(str1,str2); (在Windows中使⽤stricmp,在Linux中使⽤strcasecmp)
功能3:忽略两个字符串中的⼤⼩写⽐较字符串,也就是对⼤⼩写不敏感
int strcmp(const char *string1, const char *string2);//库函数原型int my_strncmp(const char* s1, const char* s2, size_t count);
int my_strcmp(const char* s1, const char* s2)
{
assert(s1);
assert(s2);
char* e1 = s1;
char* e2 = s2;
while ((*e1 == *e2) && (*e1 != '\0') && (*e2 != '\0'))
{
e1++;
e2++;
}
if (*e1 > *e2)
return 1;
else if (*e1 < *e2)
return -1;
if (*e1 == *e2 == '\0')
return 0;
}
int my_strncmp(const char* s1, const char* s2, size_t count) {
assert(s1);
assert(s2);
while ((count--) && (*s1 != '\0') && (*s2 != '\0'))
{
if (*s1 > *s2)
return 1;
if (*s1 < *s2)
return -1;
s1++; s2++;
}
if (*s1 != '\0')
return 1;
if (*s2 != '\0')
return -1;
return 0;
}
int main()
{
char s1[] = "bcde";
char s2[] = "cde";
char sn1[] = "bcd";
char sn2[] = "bcdd";
printf("strncmp:%d\n", my_strncmp(sn1, sn2, 5));
printf("strcmp:%d\n", my_strcmp(s1, s2));
system("pause");
return 0;
}
int main()
{
char buf2[5] ="Abbb", *buf1 = "cBBB" ;
int ptr;
ptr = stricmp(buf2, buf1);
if(ptr>0)
cout<<"buffer2 is greater than buffer1"<<endl;
if(ptr<0)
cout<<"buffer2 is less than buffer1"<<endl;
if(ptr==0)
cout<<"buffer2 equals buffer1"<<endl;
}
6.strchr函数
原型:strchr(str,c);
功能:在str字符串中查⾸次出现字符c的位置(从字符串的⾸地址开始查)
原型2:strrchr(str,c);
功能2:在字符串str中从后向前开始查字符c⾸次出现的位置
原型3:strstr(str1,str2);
功能3:在字符串str1中查字符串str2的位置,若到,则返回str2第⼀个字符在str1中的位置的指针,若没到,返回NULL
其原型为:char * strchr (const char *str, int c);
【参数】str 为要查的字符串,c 为要查的字符。
strchr() 将会出 str 字符串中第⼀次出现的字符 c 的地址,然后将该地址返回。
注意:字符串 str 的结束标志 NUL 也会被纳⼊检索范围,所以 str 的组后⼀个字符也可以被定位。
【返回值】如果到指定的字符则返回该字符所在地址,否则返回 NULL。
返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置。设字符在字符串中⾸次出现的位置为 i,那么返回的地址可以理解为 str + i。
提⽰:如果希望查某字符在字符串中最后⼀次出现的位置,可以使⽤ strrchr() 函数。
【实例1】查字符5⾸次出现的位置。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。