详细解读C++char类型函数

简介: 详细解读C++char类型函数

1.0 字符串复制

1.1 strcpy() 完全复制

原型:char strcpy(char dest, char src);

功能:把从src地址开始且含有 ‘\0’结束符的字符串复制到以dest开始的地址空间

返回指向dest的指针

说明: src 和 dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串

1 int main()

2 {

3 char src【】="abcde";

4 char dest【100】;

5 strcpy(dest,src);

6 printf("%s",dest);

7 //输出] abcde

8 }

1.2 strncpy() 部分复制

原型: char strncpy(char dest, char src, int size_tn);

功能:将字符串src中最多n个字符复制到字符数组dest中(ta并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针

说明:如果n > dest串长度,dest栈空间溢出产生崩溃异常

src串长度 <= dest串长度

如果n=(0, src串长度),src的前n个字符复制到dest中

但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况

这时,一般建议采取memset将dest的全部元素用null填充

如果n = src串长度,与strcpy一致

如果n = dest串长度,【0,src串长度】处存放于desk字串,(src串长度, dest串长度】处存放NULL

src串长度 > dest串长度

如果n = dest串长度,则dest串没有NULL字符,会导致输出会有乱码

1 int main()

2 {

3 char src【】="SWT is so great! We should % him everyday.";

4 char dest【100】;

5

6 memset(dest,0,sizeof(dest));

7 strncpy(dest,src,10);

8 printf("%s\n",dest);

9 //输出]SWT is so

10

11 memset(dest,0,sizeof(dest));

12 strncpy(dest,src,sizeof(src));

13 printf("%s\n",dest);

14 //输出]SWT is so great! We should % him everyday.

15

16 memset(dest,0,sizeof(dest));

17 strncpy(dest,src,sizeof(dest));

18 printf("%s\n",dest);

19 //输出]SWT is so great! We should % him everyday.

20

21 char des【10】;

22 memset(des,0,sizeof(des));

23 strncpy(des,src,sizeof(src));

24 printf("%s\n",des);

25 //exe停止工作

26 }

2.0 字符串合并

2.1 strcat() 完全合并

原型: char strcat(char dest, char src);

功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的 ‘\0’)并添加 ‘\0’

返回指向dest的指针

说明: src 和 dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串

1 int main()

2 {

3 char src【】="OI!";

4 char dest【】="We like ";

5 strcat(dest,src);

6 printf("%s",dest);

7 //输出]We like OI!

8 }

2.2 strncat() 部分合并

原型: char strncat(char dest, char src, int n);

功能:把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的 ‘\0’)并添加 ‘\0’

返回指向dest的指针

说明: src 和 dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串

1 int main()

2 {

3 char src【】="Please login in here!#$%@$@%@#$@%";

4 char dest【】="Welcome to the largest talking room of SLYZ! ";

5 strncat(dest,src,21);

6 printf("%s",dest);

7 //输出]Welcome to the largest talking room of SLYZ! Please login in here!

8 }

3.0 字符串查找

3.1 strchr() 查找字符

原型: char strchr(char s, char c);

功能: 查找字符串s中首次出现字符c的位置

说明: 返回首次出现c的位置的指针,如果s中不存在c则返回NULL

1 int main()

2 {

3 char src【】="Can you find some thing?";

4 int t=strchr(src,'?')-src;

5 printf("%d",t);

6 //输出]23

7 }

3.2 strchr() 查找字符串

原型: char strstr(char haystack, char needle);

功能: 从字符串haystack中寻找needle第一次出现的位置(不比较结束符”\0”)

说明: 返回指向第一次出现needle位置的指针,如果没找到则返回NULL

1 int main()

2 {

3 char src【】="Can you find some thing?";

4 int t=strstr(src,"thing")-src;

5 printf("%d",t);

6 //输出]18

7 }

4.0 字符串比较

4.1 strcmp() 区分大小写

原型: int strcmp(char s1, char s2);

功能: 比较字符串s1和s2,区分大小写

说明: 当s1 < s2时,返回值<0;

??? 当s1 = s2时,返回值=0;

??? 当s1 > s2时,返回值>0。

1 int main()

2 {

3 char src【】="Hello!";

4 char dest【】="hello!";

5 if (!strcmp(src,dest)) printf("SAME");

6 else printf("DIFFERENT");

7 //输出]DIFFERENT

8 }

4.2 stricmp() 不区分字母的大小写

原型: int stricmp(char s1, char s2);

功能: 比较字符串s1和s2,但不区分字母的大小写

说明: 当s1 < s2时,返回值<0;

??? 当s1 = s2时,返回值=0;

??? 当s1 > s2时,返回值>0。

1 int main()

2 {

3 char src【】="Hello!";

4 char dest【】="hello!";

5 if (!stricmp(src,dest)) printf("SAME");

6 else printf("DIFFERENT");

7 //输出]SAME

8 }

4.3 strncmp() 部分比较,区分字母的大小写

原型: int strncmp(char s1, char s2, int n);

功能: 比较字符串s1和s2的前n个字符

说明: 当s1 < s2时,返回值<0;

??? 当s1 = s2时,返回值=0;

??? 当s1 > s2时,返回值>0。

1 int main()

2 {

3 char src【】="A APPLE A DAY.";

4 char dest【】="a apple a day.";

5 if (strncmp(src,dest,8)==0) printf("SAME");

6 else printf("DIFFERENT");

7 //输出]DIFFERENT

8 }

4.4 strnicmp() 部分比较,不区分字母的大小写

原型: int strnicmp(char s1, char s2, int n);

功能: 比较字符串s1和s2的前n个字符但不区分大小写

说明: 当s1 < s2时,返回值<0;

??? 当s1 = s2时,返回值=0;

??? 当s1 > s2时,返回值>0。

1 int main()

2 {

3 char src【】="A APPLE A DAY.";

4 char dest【】="a apple a day.";

5 if (strnicmp(src,dest,8)==0) printf("SAME");

6 else printf("DIFFERENT");

7 //输出]SAME

8 }//代码效果参考:http://www.ezhiqi.com/bx/art_3641.html

5.0 字符串转化

5.1 strupr() 小写转大写

原型: char strupr(char s);

功能: 将字符串s转换为大写形式

说明: 只转换s中出现的小写字母,不改变其它字符

返回指向s的指针

1 int main()

2 {

3 char s【】="Let's % SWT together!";

4 strupr(s);

5 printf("%s",s);

6 //输出]LET'S % SWT TOGETHER!

7 }

5.2 strlwr() 大写转小写

原型: char strlwr(char s);

功能: 将字符串s转换为小写形式

说明: 只转换s中出现的大写字母,不改变其它字符

返回指向s的指针

1 int main()

2 {

3 char s【】="Let's % SWT together!";

4 strlwr(s);

5 printf("%s",s);

6 //输出]let's % swt together!

7 }

5.3 strrev() 字符串倒置

原型: char strrev(char* s);

功能: 把字符串s的所有字符的顺序颠倒过来(不包括空字符”\0”)

说明: 返回指向颠倒顺序后的字符串指针

1 int main()

2 {

3 char s【】="!uoy kcor lliw eW";

4 strrev(s);

5 printf("%s<

相关文章
|
1天前
|
编译器 C++
【C++】类和对象③(类的默认成员函数:赋值运算符重载)
在C++中,运算符重载允许为用户定义的类型扩展运算符功能,但不能创建新运算符如`operator@`。重载的运算符必须至少有一个类类型参数,且不能改变内置类型运算符的含义。`.*::sizeof?`不可重载。赋值运算符`=`通常作为成员函数重载,确保封装性,如`Date`类的`operator==`。赋值运算符应返回引用并检查自我赋值。当未显式重载时,编译器提供默认实现,但这可能不足以处理资源管理。拷贝构造和赋值运算符在对象复制中有不同用途,需根据类需求定制实现。正确实现它们对避免数据错误和内存问题至关重要。接下来将探讨更多操作符重载和默认成员函数。
|
2天前
|
程序员 编译器 C++
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
7 0
|
3天前
|
缓存 C++
详细解读C++常用库函数C函数库cstdio
详细解读C++常用库函数C函数库cstdio
|
4天前
|
C++
C++函数对象(仿函数)
C++函数对象(仿函数)
7 0
|
4天前
|
C++
C++函数的默认参数、占位符、重载
C++函数的默认参数、占位符、重载
11 0
|
9月前
|
存储 关系型数据库 MySQL
面试时被这样一个问:”存储MD5值应该用VARCHAR还是用CHAR?
一个5年工作经验的小伙伴,在面试的时候被这样一个问题。说”存储MD5值应该用VARCHAR还是用CHAR“,他一时间不只如何选择,感觉用VARCHAR也可以,用CHAR也行。希望我来帮忙分析一下。
82 0
|
1月前
|
存储 关系型数据库 MySQL
MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%🚀
本篇文章来讨论MySQL字段的字符类型选择并深入实践char与varchar类型的区别以及在千万数据下的性能测试
MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%🚀
|
1月前
|
存储 数据库
5. CHAR和VARCHAR的区别?
`CHAR`和`VARCHAR`在数据库中有所不同:`CHAR`长度固定,用空格填充,存储效率高,英文占1字节,汉字占2字节;而`VARCHAR`长度可变,节省空间,英文和汉字都占2字节。
24 0
|
1月前
|
存储 SQL NoSQL
面试题:char和varchar的区别?
字节面试题:char和varchar的区别?
41 0
|
1月前
|
存储 机器学习/深度学习 关系型数据库
mysql中char和varchar的区别
mysql中char和varchar的区别
57 1

热门文章

最新文章