C++基础---char型字符串库函数
2015-08-16 17:58
621 查看
1. char型字符串库函数
1.1 赋值
赋值: strcpy原型: char* strcpy(char* dest, char* src);
功能: 把从src地址开始且含有 ‘\0’结束符的字符串复制到以dest开始的地址空间。返回指向dest的指针。
说明: src 和 dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
代码示例:
#include <iostream> using namespace std; int main() { char src[]="My name is Mini."; char dest[128];//定义数组长度要足够大 strcpy(dest, src); cout<<"源字符串:"<<src<<endl; cout<<"目标字符串:"<<dest<<endl; system("pause"); return 0; } =>源字符串:My name is Mini. 目标字符串:My name is Mini.
1.2 替换
替换: strncpy原型: char* strncpy(char* dest, char* src, int size_tn);
功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。
说明:如果n > dest串长度,dest栈空间溢出产生崩溃异常。
a)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)
如果n=(0, src串长度),src的前n个字符复制到dest中。但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况。这时,一般建议采取memset将dest的全部元素用null填充,如:memset(dest,0,7)(7为从dest起始地址开始前7个位置填充null,dest可以为字符指针和数组名)。注意:char* pc=”abc”; char chs[5]; sizeof(pc)为4(包含null)(有些编译器不行),sizeof(chs)为5。
如果n = src串长度,与strcpy一致。
如果n = dest串长度,[0,src串长度]处存放于desk字串,(src串长度, dest串长度]处存放NULL。
b)src串长度>dest串长度
如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。
注:如果不考虑src串复制完整性,可以将dest最后一字符置为NULL。所以,一般把n设为dest(含null)的长度(除非将多个src复制到dest中)。当n=dest串长度时,定义dest为字符数组,因为这时没有null字符拷贝。
代码示例:
#include <iostream> using namespace std; int main() { char src[]="My name is Mini."; char dest[7];//定义数组长度要足够大 strncpy(dest, src,sizeof(dest));//n =dest串长度,导致出现乱码 cout<<"源字符串:"<<src<<endl; cout<<"目标字符串:"<<dest<<endl; system("pause"); return 0; } =>源字符串:My name is Mini. 目标字符串:My name烫烫烫烫蘉y name is Mini.
1.3 合并
合并: strcat原型: char* strcat(char* dest, char* src);
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的 ‘\0’)并添加 ‘\0’。返回指向dest的指针。
说明: src 和 dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
代码示例:
#include <iostream> using namespace std; int main() { char src[]="is Mini."; char dest[128] ="My name "; //定义数组长度要足够大 strcat(dest, src); cout<<"源字符串:"<<src<<endl; cout<<"目标字符串:"<<dest<<endl; system("pause"); return 0; } =>源字符串:is Mini. 目标字符串:My name is Mini.
1.4 部分合并
部分合并: strncat原型: char* strncat(char* dest, char* src, int n);
功能:把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的 ‘\0’)并添加 ‘\0’。返回指向dest的指针。
说明: src 和 dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
代码示例:
#include <iostream> using namespace std; int main() { char src[]="is Mini."; char dest[128] ="My name ";//定义数组长度要足够大 strncat(dest, src, 2); cout<<"源字符串:"<<src<<endl; cout<<"目标字符串:"<<dest<<endl; system("pause"); return 0; } =>源字符串:is Mini. 目标字符串:My name is
1.5 查找字符
查找字符: strchr原型: char* strchr(char* s, char c);
功能: 查找字符串s中首次出现字符c的位置。
说明: 返回首次出现c的位置的指针,如果s中不存在c则返回NULL。
代码示例:
#include <iostream> using namespace std; int main() { char src[]="My name is Mini."; char dest='i'; char *p = strchr(src, dest); if(NULL == p) { cout<<"在字符串中没找到字符"<<endl; } else { cout<<"在字符串中找到了:"<<*p<<endl; } system("pause"); return 0; } =>在字符串中找到了:i
1.6 查找字符串
查找串: strchr原型: char* strstr(char* haystack, char* needle);
功能: 从字符串haystack中寻找needle第一次出现的位置(不比较结束符”\0”)。
说明: 返回指向第一次出现needle位置的指针,如果没找到则返回NULL。
代码示例:
#include <iostream> using namespace std; int main() { char s1[] = "My name is Mini."; char dest[]="no";//查找字符串 char *p = strstr(s1, dest); if(p != NULL) { cout<<"查找字符串中某字符串第一次出现的位置:"<<*p<<endl; } else { cout<<"没有找到制定的字符串"<<endl; } system("pause"); return 0; } =>没有找到制定的字符串
1.7 比较,区分字母的大小写
比较: strcmp原型: int strcmp(char* s1, char* s2);
功能: 比较字符串s1和s2,区分大小写
说明: 当s1 < s2时,返回值<0;
当s1 = s2时,返回值=0;
当s1 > s2时,返回值>0。
代码示例:
#include <iostream> using namespace std; int main() { char s1[] = "MY NAME IS MINI."; char s2[] = "my name is mini."; int r= strcmp(s1, s2); //比较字符串s1和s2,区分字母的大小写 if(r == 0) { cout<<"两个字符串相等"<<endl; } else { if(r > 0) { cout<<"字符串s1大于字符串s2"<<endl; } else { cout<<"字符串s1小于字符串s2"<<endl; } } system("pause"); return 0; } =>字符串s1小于字符串s2
1.8 比较,不区分字母的大小写
比较: stricmp原型: int stricmp(char* s1, char* s2);
功能: 比较字符串s1和s2,但不区分字母的大小写。
说明: 当s1 < s2时,返回值<0;
当s1 = s2时,返回值=0;
当s1 > s2时,返回值>0。
代码示例:
#include <iostream> using namespace std; int main() { char s1[] = "MY NAME IS MINI."; char s2[] = "my name is mini."; int r= stricmp(s1, s2);//比较字符串s1和s2,但不区分字母的大小写 if(r == 0) { cout<<"两个字符串相等"<<endl; } else { if(r > 0) { cout<<"字符串s1大于字符串s2"<<endl; } else { cout<<"字符串s1小于字符串s2"<<endl; } } system("pause"); return 0; } =>两个字符串相等
1.9 部分比较,区分字母的大小写
部分比较: strncmp原型: int strncmp(char* s1, char* s2, int n);
功能: 比较字符串s1和s2的前n个字符。
说明: 当s1 < s2时,返回值<0;
当s1 = s2时,返回值=0;
当s1 > s2时,返回值>0。
代码示例:
#include <iostream> using namespace std; int main() { char s1[] = "MY NAME IS MINI."; char s2[] = "my name is mini."; int r= strncmp(s1, s2, 2);//比较字符串s1和s2的前2个字符,区分字母的大小写 if(r == 0) { cout<<"两个字符串相等"<<endl; } else { if(r > 0) { cout<<"字符串s1大于字符串s2"<<endl; } else { cout<<"字符串s1小于字符串s2"<<endl; } } system("pause"); return 0; } =>字符串s1小于字符串s2
1.10 部分比较,不区分字母的大小写
部分比较: strnicmp原型: int strnicmp(char* s1, char* s2, int n);
功能: 比较字符串s1和s2的前n个字符但不区分大小写。
说明: 当s1 < s2时,返回值<0;
当s1 = s2时,返回值=0;
当s1 > s2时,返回值>0。
代码示例:
#include <iostream> using namespace std; int main() { char s1[] = "MY NAME IS MINI."; char s2[] = "my name is mini."; int r= strnicmp(s1, s2, 2);//比较字符串s1和s2的前2个字符,但不区分字母的大小写 if(r == 0) { cout<<"两个字符串相等"<<endl; } else { if(r > 0) { cout<<"字符串s1大于字符串s2"<<endl; } else { cout<<"字符串s1小于字符串s2"<<endl; } } system("pause"); return 0; } =>两个字符串相等
1.11 小写转大写
小写->大写: strupr原型: char* strupr(char* s);
功能: 将字符串s转换为大写形式。
说明: 只转换s中出现的小写字母,不改变其它字符。返回指向s的指针。
代码示例:
#include <iostream> using namespace std; int main() { char s1[] = "My name is Mini."; strupr(s1); cout<<"字符串中的小写字母转为大写字母后:"<<s1<<endl; system("pause"); return 0; } =>字符串中的小写字母转为大写字母后:MY NAME IS MINI.
1.12 大写转小写
大写->小写: strlwr原型: char* strlwr(char* s);
功能: 将字符串s转换为小写形式。
说明: 只转换s中出现的大写字母,不改变其它字符。返回指向s的指针。
代码示例:
#include <iostream> using namespace std; int main() { char s1[] = "My name is Mini."; strlwr(s1); cout<<"字符串中的大写字母转为小写字母后:"<<s1<<endl; system("pause"); return 0; } =>字符串中的大写字母转为小写字母后:my name is mini.
1.13 获取字符串长度
获取字符串长度: strlen原型: int strlen(char* s);
功能: 计算字符串s的可见字符实际长度。
说明: 返回s的长度,不包括结束符“\0”。
代码示例:
#include <iostream> using namespace std; int main() { char s1[] = "My name is Mini."; int len = strlen(s1); cout<<"字符串中的可见字符长度:"<<len<<endl; system("pause"); return 0; } =>字符串中的可见字符长度:16
1.14 倒置
倒置: strrev原型: char* strrev(char* s);
功能: 把字符串s的所有字符的顺序颠倒过来(不包括空字符”\0”)。
说明: 返回指向颠倒顺序后的字符串指针。
代码示例:
#include <iostream> using namespace std; int main() { char s1[] = "abcdefghijklmnopqrstuvwxyz"; strrev(s1); cout<<"字符串导致后:"<<s1<<endl; system("pause"); return 0; } =>字符串导致后:zyxwvutsrqponmlkjihgfedcba
1.15 设置
设置: strset原型: char* strset(char* s, char c);
功能: 把字符串s中的所有字符都设置成字符c。
说明: 返回指向s的指针。
代码示例:
#include <iostream> using namespace std; int main() { char s1[] = "My name is Mini."; char dest='c'; strset(s1, dest); cout<<"把字符串s中的所有字符都设置成字符c:"<<s1<<endl; system("pause"); return 0; } =>字符串导致后:zyxwvutsrqponmlkjihgfedcba
参考文献:
[1] 百度搜索关键字:char型字符串库函数
相关文章推荐
- [LeetCode] Clone Graph
- JAVA语言的特点:C++--
- 黑马程序员--oc语言类和对象
- C++ Primer 学习笔记_45_STL实践与分析(19)--建筑常规算法
- C++面试题
- c++ 什么情况使用深拷贝什么情况使用浅拷贝
- C++基础---字符串(char型字符串)
- C++多态和虚函数
- C++命名规则
- C++基础---链表
- 贪心算法的C语言实现与运用详解
- C++基础---指针数组与数组指针
- 【C语言经典实例】-指向结构体的指针变量
- c++ 类的赋值运算符=的重载,以及深拷贝和浅拷贝
- [LeetCode] Palindrome Partitioning
- C++基础---对象数组中delete与delete[]的区别
- C++基础---动态数组
- C语言变量问题汇总
- C++: 继承与派生
- C++基础---多维数组