c/c++学习_字符串处理
来源:互联网 发布:清空数据库sql语句 编辑:程序博客网 时间:2024/06/05 15:50
c++字符串处理?
在c++中,有两种字符串,一种是从c沿袭过来的,称为c-字符串,简称c-串。c-串是以一个全0位(整数0)字节作为结束符的字符序列。该全0字节即是8位的整数0,也是ASCII码的0。
- 1.c-串
c-串还称为ASCII串(即ASCII字符序列加上尾巴Zero)。 c-串也是字符串字面值,其格式为双引号括起来的字符序列,例如,"Hello!",它在空间的存储形式为:
'H' 'e' ' l '' l '' o '' ! ' 0很显然,c-串的空间长度为字符串长度加1。(PS:c-串的字符序列总是添加一个结束标志)如果要将c-串放到字符数组,则元素个数非比字符数多1不可。char buffer[7]="Hello!" //若为char buffer[6]="Hello!";则为错误。
字符字面值的类型为char,那么c-串又是什么类型呢?c-串的类型为char*,说得更准确一点,是const char*。事实上,所有的字面值类型都是const的。char* 为字符指针,它与字符数组不同,但操作上是一样的,都表示c-串的起始地址。
- 2.字符指针与字符数组(char Pointers & char Arrays)
指针是表示内存空间位置的类型。字符指针就是所指向的空间位置上的值,当做字符来操作的类型。
例如:char* str="Hello";
cout<<*str<<endl;//显示H
cout<<str<<endl;//显示Hello
str是字符指针变量。*str是字符指针变量的间接引用。即,若str指向“Hello”的首地址,则*str表示该地址代表的空间上的值----‘H’。
输出字符指针就是输出c-串。所以输出str时,便从‘H’字符的地址开始,输出所有字符直到遇到0。输出字符指针的间接引用,就是输出单个字符。所以输出*str时,便输出str所指向的字符‘H’。
经典例子:
#include "stdafx.h"#include "iostream"using namespace std;int _tmain(int argc, _TCHAR* argv[]){cout<<("join"=="join" ? "" : "not ")<<"equal\n"; //字面值比较char* str1="good";char* str2="good";cout<<(str1==str2 ? "" : "not ")<<"equal\n";//字符指针比较char buffer1[6]="Hello";char buffer2[6]="Hello";cout<<(buffer1==buffer2 ? "" : "not ")<<"equal\n";//字符数组比较return 0;}//由于c-串类型是字符指针,因此,比较两个相同的c-串的时候,会因空间的位置的不同而不同。//而且,分别存储两个相同c-串的字符数组,其数组比较也会是不相同的。
字符指针和字符数组的区别:
- 字符数组是由若干个元素组成的,每个元素存放一个字符;而字符指针变量存放的是字符首地址。
- 赋值方式不同,字符数组只能对各个元素分别赋值;而字符指针只需要赋值给字符串的首地址就好。
- 字符指针占用的内存要少于字符数组。
- 指针变量的值可以改变;而字符数组名虽然代表地址,但它的值不会变化。
- 3.不得不配备专门操作的c-串库函数(c库函数设计了一系列的c-串库函数,解决了c-串的赋值、复制、修改、比较、连接等问题。)
这些库函数的操作,默认在string.h的头文件中。由于BAB编译器的iostream头文件嵌套包含了它,所以程序中省略了#include<string.h>
----------------->strcpy 读作 string copy;
其函数声明为:char* strcpy(char* x1, char* x2);
该函数将x2字串拷贝到x1所在位置,不论x1字串先前是什么内容,拷贝之后都将被所拷贝的内容覆盖。拷贝函数被调用之后,返回x1参数的首地址,目的是让调用结果可以直接参加之后的字串操作。
(由于x2字串的长度比x1字串空间的要长,所以strcpy的使用并不安全,需要编程时谨慎考虑。很可能发生不可预料的运行错误)
------------------>strcmp 读作 string compare;
其函数声明为:int strcmp(char* x1, char* x2);
它表示x1串与x2串进行字典序比较。如果x1小则返回值为负数;如果x1大,则返回非0正数;如果二者相等,则返回0。
------------------->strcat读作string concat;
其函数声明为:char* strcat(char* x1, char x2);
它将x2字串的内容接在x1字串之后,或者说,将x2字串拷贝到x1字串结束处。所返回的x1字串的结果可以直接参加之后的操作。
(该调用会引起x1字串加长,或者说,结束符0的位置靠后。在x1字串之后所余自身空间不足以接纳x2字串时,调用函数将不安全。)
-------------------->strrev读作string reverse;
其函数声明为:char* strrev(char* x);
它将字串倒过来,并改变原来的存储,同时直接将结果子串返回,以便于其后的操作。
-------------------->strset读作string set;
其函数声明为:char* strset(char*, char b);
它将x整个字符串的每个字符都用b字符来取代,并将x作为结果返回。
--------------------->strstr读作string substring;
其函数声明为:int strstr(char* x, char* s);
该函数在x字串中查找s字串。若找到,则返回整数1,否则返回整数0。
--------------------->strchr读作string char;
其函数声明为:int strchr(char* x, char b);
该函数在x字串中查找b字符。若找到,则返回整数1,否则返回整数0。
待续()
- c/c++学习_字符串处理
- C++_字符串类型
- C++_字符串(string)
- 20161216C语言基础18_字符串处理函数
- [C/C++]_[字符串处理]_[过滤出HTML标签的属性值]
- C语言学习-1 字符串处理
- [C/C++]_[初级]_[使用C字符串(或者std::string)处理函数获取文件所在目录
- c中的字符串处理
- c++(字符串处理函数)
- 复习C字符串处理
- C字符串处理函数
- C字符串处理函数
- C语言字符串处理
- c 字符串处理
- C/C++字符串处理
- C 字符串处理
- c++(字符串处理函数)
- C字符串处理函数
- 转一篇谷歌大牛peng pong的算法学习之路
- USACO zerosum DFS 1A
- 程序员生存定律--成长路上常见的坑
- 二叉堆维护优先队列
- gcc编译(学习object c)
- c/c++学习_字符串处理
- UVa 913 - Joana and the Odd Numbers
- [转载]常用牛人主页链接(计算机视觉、模式识别、机器学习相关方向,陆续更新。。。。)
- VirtualProtect 3方法 -seh ret-ASLR-dep-Adrenalin Player 2.2.5.3
- as3中点击按钮或者输入文本框后舞台无法接收键盘输入的解决方法
- 编写访问数据库的应用层程序,经常catch出的一些错误
- 一句话动态开辟二维数组
- 【PhoneGAP学习】Android PhoneGap框架(1)--重要知识点的预先学习(XHR)
- 1039. Course List for Student