C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计
编程技能 a C++语言程序设计
(二)指针与字符串 C/C++字符串常量 C/C++处理字符串处理的两种方式:数组方式和指针方式 C++语言程序设计 是用双引号括起的字符序列,并以字符'\0'作为结束标志 例如:”This is a string” 字符串常量存放在内存的常量区域 字符串常量的首地址看做指针,这种指针既是常指针,也是指针常量 字符串常量的内容是不能改变的,而且首地址也是不能改变的 C/C++处理字符串处理的两种方式:数组方式和指针方式 数组方式:将字符串存入字符数组后,再进行处理 一般可以在声明数组的时候用字符串来初始化 例如:char string_array[]="What’s a nice day!"; 指针方式:用字符串常量来初始化一个字符指针 例如: char *string_pt="What’s a nice day!"; C++语言程序设计
(二)指针与字符串 两种字符串处理方式比较 两种方式在一些具体的操作上有所不同的 C++语言程序设计 常量不能放在等式左边 已 定 义 char s_array[]="Thia is a book"; char *s_pt="This is a book"; 直接输出 cout<<s_array; 可以 cout<<s_pt; 直接输入 cin>>s_array; cin>>s_pt; 不可以 直接更改 s_array="OK"; s_pt="OK"; 赋值 s_array=s_pt; s_pt=s_array; 常量不能放在等式左边 通过cin来修改指针所指的内容是不允许的运行时会出错 C++语言程序设计
(二)指针与字符串 字符串操作函数 C/C++提供了大量的字符串处理函数 使用时都需要包含头文件 string.h 调用这些函数时,要保证作为目的字符串的实际参数必须是可写的,且有足够的空间,否则会出现运行错误 功能 函数原型 返回值 说明 字符串长度 int strlen(const char *string); 长度值 '\0'不计入 字符串复制 char *strcpy(char *s1,const char *s2); 复制的字符串 s1要有足够空 间 按字符数复制 char *strncpy(char *s1,const char *s2); 字符串比较 int strcmp(const char *s1,const char *s2); <0,=0,>0对应 s1<s2,s1=s2,s1>s2 字符串连接 char *strcat( char *s1, const char *s2 ); 连接后的字符串 C++语言程序设计
例: strcpy()和strncpy()的比较 (二)指针与字符串 例: strcpy()和strncpy()的比较 //strcpy()和strncpy()的比较 #include <iostream> #include <string> using namespace std; void main() { int n; char *array1 = "Happy Birthday to You"; char array3[ 15 ]; char array2[ 25 ]; strcpy( array2, array1 ); //复制array1到array2 cout << "The string in array1 is: " << array1 << “\nThe string in array2 is: ” << array2 << ‘\n’; 复制array1到array2,没有问题 C++语言程序设计
例: strcpy()和strncpy()的比较 (二)指针与字符串 例: strcpy()和strncpy()的比较 复制array1到array3,空间不够,会有运行时错误 按实际数组大小,复制array1到array3,没有问题 /*strcpy(array3,array1); //直接复制array1到array3 cout<<array3<<endl; */ n=sizeof(array3); strncpy( array3, array1, n-1 ); //复制array1的n-1个字符到array3 array3[ n-1 ] = '\0'; //添加'\0' 到array3 cout << "The string in array3 is: " << array3 << endl; } C++语言程序设计