1.8 字符指针和字符串处理
来源:互联网 发布:直通车重要数据 编辑:程序博客网 时间:2024/06/05 17:24
- 8 字符指针和字符串处理
- 字符指针
- 带参数的main函数
- 字符串处理函数
- strcat和strncat
- strcpy和strncpy
- strcmp和strncmp
1.8 字符指针和字符串处理
在C++中,字符串既可以通过字符数组来存取,也可以通过字符指针来操作
字符指针
- 字符指针:定义一个指针时,指定的类型是
char *
- 格式:
char *<指针名1>[,*<指针名2>,...];
- 初始化:通过字符串常量或一维字符数组
- 字符串常量:字符串常量有一个地址,因而它可以赋给一个字符指针变量
- 一维字符数组:字符数组名就是一个指向字符串的指针常量.
char *p1 = "Hello";char *p2;p2 = "Hello";
char *p1,str[] = "Hello";p1 = str;
- 字符串常量和字符数组来初始化字符指针在本质上是不同的,主要体现在:
- 在有点编译系统中,相同的字符串常量的地址可能是相同的,但相同字符串内容的两个字符数组的地址一定不同
- 在大多数编译系统中(如Visual C++)中,字符串常量所在的是常量区,其内存空间的内容在程序运行时是不可修改的,而字符数组的内存空间的内容是可修改的
// 字符串逆序输出#include <iostream>using namespace std;int main(){ char *p1 = "ABCDEFG", *p2 = p1; while (*p1 != '\0') p1++; //将指针指向字符常量最后的结束符 while (p2 <= p1--) cout << *p1; cout << endl; system("pause"); return 0;}
带参数的main函数
- 格式:
数据类型 main(int argc,char * argv[])
- 第一个参数:int,用来存放命令行参数的个数 +1(可执行文件名字)
- 第二个参数:argv是一个一维的指针数组,用来存放命令行中各个参数和命令字(可执行文件名)的字符串,且规定:
argv[0]存放命令字
argv[1]存放命令行中第一个参数
argv[2]存放命令行中第二个参数
… - 这里的argc的值和argv[]各个元素的值都是系统自动赋给的
//处理命令行参数#include <iostream>using namespace std;int main(int argc, char *argv[]){ cout << "这个程序的程序名是 " << argv[0] << endl; if (argc <= 1) { cout << "没有参数"; } else { int nCount = 1; while (nCount < argc) { cout << "第" << nCount << "个参数是: " << argv[nCount] << endl; nCount++; } } system("pause"); return 0;}
编译连接后,找到该源程序的.exe,然后切换到DOS命令进行测试
字符串处理函数
C++提供了若干个字符串处理函数,放在string.h头文件中
1.strcat
和strncat
strcat
是”string(字符串) catenate(连接)”的简写,其作用是**将两个字符串连接起来,形成一个新的字符串:char *strcat(char *dest,const char *src);
将第二个参数src指定的字符串连接到由第一个参数dest指定的字符串的末尾.成功返回执行dest内存空间的指针,失败返回NULL
char s1[50] = "good ";char s2[] = "morning";strcat(s1,s2);cout << s1;//结果输出 good morning
dest
指向的内存空间必须足够大,且是可写的(即不能是字符串常量或const字符指针),以便能存下连接的新字符串.- 两个字符串开始都有’\0’,但是连接的时候,
dest
后面的’\0’会被清除 - 在string.h头文件,还有一个
strncat
函数:char *strncat(char *dest,const char *src,size_t maxlen);
maxlen
参数限定了连接到dest
的字符串src
的最大字符个数
char s1[50] = "good ";char s2[] = "morning";strncat(s1,s2,3);cout << s1;//结果为 good mor
2.strcpy
和strncpy
- 函数
strcpy
是”string copy”(字符串复制)的简写,用于字符串的”赋值”.char *strcpy(char *dest,const char *src);
将第2个参数src指定的字符串复制到第一个参数dest指定的内存空间,包括结尾的字符串结束符’\0’.成功返回指定dest内存空间的指针,失败返回NULL
char s1[50];char s2[] = "word";strcpy(s1,s2);cout << s1;//结果输出 word
- 注意:
- 复制是内存空间的写入操作,因而需要dest所指向的内存空间足够大,且内存空间是可写入的,以便能容纳被复制的字符串src.注意:dest所指向的内存空间的大小至少是src字符个数+1,因为结尾还有一个结束符’\0’
- 不能试图通过指针的指向改变来复制字符串
- 可以使用
strncpy
函数来限制被复制的字符串src的字符个数char *strncpy(char *dest,const char *src,size_t maxlen);
maxlen
用来指定被复制字符串src的最大字符个数(不包含’\0’)
char s1[50];char s2[]="word";strncpy(s1,s2,2);cout << s1;// 结果 wo
3.strcmp
和strncmp
strcmp
是”string compare”(字符串比较)的简写,用于两个字符串的比较int strcmp(const char *s1,const char *s2);
- s1=s2:返回0
- s1>s2:返回一个正整数
- s1
阅读全文
1 0
- 1.8 字符指针和字符串处理
- 处理字符串的字符数组和字符指针
- 字符和字符串处理
- 字符和字符串处理
- 字符串指针和字符数组
- 字符数组和字符串指针
- 三十二、数组、指针和字符串:字符数组存放和处理字符串
- 字符数组、字符指针和字符串
- 字符数组、字符指针和字符串
- windows字符和字符串处理
- Chapter02_字符和字符串处理
- windows字符和字符串处理
- C和指针 字符串处理
- 字符和字符串(字符数组)处理
- 字符,字符串,字符指针,
- Java String字符串处理和字符处理
- 字符串常量初始化指针和字符数组
- 字符指针 和 字符串 效率的 研究
- 博弈—SG
- NOIP 提高组 2004
- Hibernate07_映射关系-MangToOne
- PL0编译器扩展
- Unity3D中生命周期函数的应用
- 1.8 字符指针和字符串处理
- AC自动机详解
- 执行 java -jar xxx.jar 是不是创建进程问题
- Farm Irrigation
- windows bat 命令
- POJ 3690 Constellations 哈希表 矩阵匹配
- 如何使用timeline profile tensorflow 程序
- 1.9 结构,共用和自定义
- CF Bottles 0-1背包