C、C++字符串处理

一、C++字符串
  C++标准库中定义了一个string类,用来处理可变长字符序列。使用string类需要#include <string>,定义在命名空间std中。

1、string的定义和初始化

string str1;             //等价于string str1 = ""
string str2 = str1;      //复制赋值
string str3 = "abcd";    //直接赋值
string str4(char *str);  //字符串指针初始化
string str5(5, 'c');     //str5的内容为ccccc

2、string常用函数

/* 基本函数 */
str.empty();            //字符串是否为空
str.c_str();                //string转换成char *
str.size(), str.length();   //字符串大小,size()和length()一样
str[n];             //获取str第n个字符,类似于数组

/* 操作符 */
+, +=,          //字符串相加:str1+str2, str1+=str2
==, !=, <>, <=, =>; //字符串比较

/* 常用函数 */
string& append(const string &s);        //同operator+=()
string& append(int n, char c);          //在当前字符串尾添加n个字符c
string& append(const string &s, int pos, int n);    //连接s从pos开始的n个字符
string& append(const char *s);      //连接c类型的字符串
string& append(const char *s, int n);   //连接s的前n个字符

string substr(int pos=0, int n=npos) const;//返回从pos开始的n个字符组成的字符串

int find(char c, int pos=0) const;  //从pos开始查找字符c出现的位置
int find(const string &s, int pos=0) const; //查找字符串s出现的位置
int find(const char *s, int pos=0) const;
int find(const char *s, int pos, int n) const; //查找s中前n个字符      
int rfind(char c, int pos=npos) const;      //反向查找字符c出现的位置
int rfind(const string &s, int pos=npos) const; //反向查找字符串出现的位置

void swap(string &s2);      //交换当前字符串和s2的值

/*删除从p0开始的n0个字符,然后在p0处插入s*/
string& replace(int p0, int n0, const string &s);
/*删除从p0开始的n0个字符,然后在p0处插入s中从pos开始的n个字符*/
string& replace(int p0, int n0, const string &s, int pos, int n);
/*删除从p0开始的n0个字符,然后在p0处插入n个c*/ 
string& replace(int p0, int n0, int n, char c);

string& insert(int p0, const string &s);    //在p0处插入s
string& insert(int p0, const string &s, int pos, int n);
string& insert(int p0, int n, char c);

string& erase(int pos=0, int n=npos);//删除pos开始的n个字符,返回修改后的字符串   

二、C字符串
  C没有封装字符串,使用的是char *指针或者char[]数组来表示。

1、初始化

const char *str1 = "abcd";
char str2[] = "abcd";
char *str3 = str2 + 1;
char *str4 = (char *)malloc(10);

2、常用函数

str[];          //按位置获取字符,char *不支持==, !=, <, >等操作符
size_t strlen(const char *str); //返回字符串的长度
char *strcat(char *dst, const char *src);   //src连接到dst后,自动添加'\0',返回dst
char *strcpy(char *dst, const char *src);   //拷贝src到dst,自动添加'\0',返回dst
int strcmp(const char *str1, const char *str2);     //比较,相等为0
void *memset(void *dst, int c, size_t count);       //将dst的前count字符复制为c

/*将src的前count字符复制到dst中,如果src和dst出现重叠,自动处理重叠*/
void *memmove(void *dst, const void *src, size_t count);
/*同memmove的功能相同,只是不能处理重叠,不会自动添加结束符*/
void *memcpy(void *dst, const void *src, size_t count);

/*比较buf1和buf2前count字节*/
int memcmp(const void *buf1, const void *buf2, size_t count); 

char *strchr(const char *str, char c);  //查找str中首次出现c的位置,没有返回NULL
char *strrchr(const char *str, char c); //查找str中最后一次出现c的位置
char *strstr(const char *str, const char *Search); //str中首次出现Search的位置

/*将src开始的count个字符添加到dst中,如果count大于src的长度,则会用src的长度替换到count。得到的dst会自动添加到'\0'*/   
char *strncat(char *dst, const char *src, size_t count);    

/*将src的count字符复制到dst中,如果count小于等于src的长度,则结尾不会加'\0',如果count大于src的长度,则会议NULL填充*/
char *strncpy(char *dst, const char *src, size_t count);    

三、字符串转换
1、C、C++之间字符串转换

/* 1、C转换成C++ */
char *pc;
string str = string(pc);

/* 2、C++转换成C */
string str("OK");
char *pc = str.c_str();

2、C++字符串与整数之间转换

/* 1、字符串到数字 */
string str = "126";
stringstream sstr(str);
int x;
sstr >> x;  //x为整数126,x定义什么类型,则输出什么类型

/* 2、数字到字符串 */
stringstream sstr;
int x = 126;
sstr << x;
string str = sstr.str();    //str为字符串"126"

3、C字符串与数字之间的转换

/* 1、字符串到数字 */
int atoi(const char *ptr);

int n;
char *str = "124";
n = atoi(str);  //n=124,与atoi类似的还有atof、atol,分别为转化为浮点数、长整型等

/* 2、数字到字符串 */
char *itoa(int value, char *string, int radix); //与atoi相反,value为要转换的整数,string为转换后存储字符串的数组,radix为转换的进制数

int number = 156;
char str[10];
itoa(number, str, 10);

4、格式化字符串
  scanf和printf函数都是针对标准输入输出进行格式化字符串的,在C中还有针对字符缓冲区进行字符串格式化的:sscanf和sprintf。

int sscanf(const char *str, const char *format, ...);
int sprintf(char *str, const char *format, ...);

eg:
sscanf(str, "%d", &i);  //将字符串转换成整数i
sprintf(str, "%s", i);  //将i转换成字符串
sprintf(str, "%s and %s", str1, str2);  //连接字符串

格式化说明符
  C函数中printf、sscanf、sprintf等都需要格式化符来决定输出格式的(format参数),下面为常见的格式化符。

     - %d        十进制有符号数
     - %u        十进制无符号数
     - %f        浮点数包括float和double
     - %s        字符串
     - %c        单个字符
     - %x        十六进制表示的整数
     - %0        八进制表示的整数

     - 控制字符宽度:在"%"和字母之间插进数字表示最大场宽
     - 浮点数显示位数:%a.bf,a为总显示长度,b为小数位长度
     - 对齐:默认为右对齐,在"%"和字母之间加"-"号为左对齐
     - 填充:在"%"和数字前加0,表示用0填充(%08d,显示8位不足填0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值