详细解读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<

相关文章
|
30天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
1月前
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
1月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
46 6
|
2月前
|
存储 Java Windows
java基础(9)数据类型中的char类型以及涉及到的转义字符
Java中的char类型可以存储一个中文字符,因为它占用两个字节。转义字符允许在代码中使用特殊字符,例如`\n`表示换行,`\t`表示制表符,`\\`表示反斜杠,`\'`表示单引号,`\"`表示双引号。可以使用`\u`后跟Unicode编码来表示特定的字符。
56 2
java基础(9)数据类型中的char类型以及涉及到的转义字符
|
1月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
24 0
C++ 多线程之线程管理函数
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
23 3
|
1月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
161 1
|
1月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
31 1
|
1月前
|
存储 编译器 程序员
C++类型参数化
【10月更文挑战第1天】在 C++ 中,模板是实现类型参数化的主要工具,用于编写能处理多种数据类型的代码。模板分为函数模板和类模板。函数模板以 `template` 关键字定义,允许使用任意类型参数 `T`,并在调用时自动推导具体类型。类模板则定义泛型类,如动态数组,可在实例化时指定具体类型。模板还支持特化,为特定类型提供定制实现。模板在编译时实例化,需放置在头文件中以确保编译器可见。
32 11
|
1月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
41 0
C++入门6——模板(泛型编程、函数模板、类模板)