字符串处理总结 字符串和整数的转化
字符串处理总结[1]
1 字符串两种表示形式
1.1 使用指向字符类型的指针
a.首先在系统的内存储器中分配一段连续的存储区域并且存放指定的字符串常量,然后将该存储区域的首地址赋值给该指针。
b.指针的指向可以更改,开始指向a,后面可以修改指向b。
c.字符类型指针指向的是字符串常量,任何试图修改常量数据的操作都是非法的,字符类型指针指向的常量字符串内容在程序中是不可以修改的。
1.2 使用字符数组
a.按照指定长度在系统的内存储器中分配连续的存储空间,字符数组的名字表示首地址,然后将该存储区域的内容进行初始化。
b.不能修改数组名字或者使用数组名字进行整体赋值的操作都是错误的。
c.可以使用字符串常量序列和使用字符串常量数据进行初始化,char s1[9] = {'H','e' ,'\0'};末尾一定是\0结尾。但是char s2[] = "string",会自动在结尾添加\0,字符数组的长度等于有效长度加上末尾的\0.
数组里面的内容是可以修改的。
2.字符串的输入和输出
2.1、字符串的输入
a、scanf
使用%c为每一个数组元素赋值
char str[10]; int j ; for(j = 0;j < 9;++j){ scanf("%c",&str[j]); } str[j] = '\0';//需要手动处理结束符号
使用%s进行整体赋值
char str[10]; scanf("%s",str);//字符串数据作为整体进行操作,自动处理末尾符号
b、gets
将字符串数据作为整体进行操作,自动处理末尾符号。
两者区别是:
scanf可以一次输入两个以上的字符串数据。scanf("%s%s",str1,str2);不同字符串之间使用空格进行区分,scanf不能处理含有空格的字符。
gets只能一个一个进行输入,可以处理含有空格的字符串。
2.2 字符串的输出
a、printf:既可以一个一个将数组元素输出,也可以整体输出,也可以多个字符串输出printf("%s/n%s",str1,str2);输出后不会自动换行;
b、puts,将字符串作为整体对待,输出后可以自动换行;
3、字符串处理常用的函数
3.1 strlen()
函数原型为:size_t strlen(const char* string);
统计有效字符个数,遇到\0结束,不统计\0。
3.2 reverse(const char* string)字符串颠倒函数。
3.3 字符串的复制char* strcpy(char* destination,char* source),将t表示的字符串拷贝到s中去,返回拷贝后的字符串地址。
3.4 字符串连接函数 char* strcat(char* destination,char* source);
3.5 字符串查找函数 char* strchr(const char* string,char target);
3.6 字符串的插入和删除void insertchr(char *s,char pos,char c);在指定的pos位置插入c,deletechr(char *s,char c);
3.7 字符串的比较
比较两个字符串的基本思想是:从两个字符串的第一个字符开始比较,直到遇到两个字符串对应位置字符的ASCII码不相同或者遇到两字符串中任何一个字符串的结尾字符'\0';
比较结束时通过两者对应位置的ASCII的差值来确定两个字符串的关系。
>0 (s1 > s2);
s1[i] - s2[i] = =0 (s1 = s2 );
<0(s1 < s2);
int strcmp(char* s ,char *t);
如果s > t,则返回值大于0,如果s < t,则返回值小于0,如果s = t,则返回值等于0;
有长度限制的字符串比较
int strncmp(const char* s1,const string s2,int count);
比较s1,s2前count个字符的关系。
C++中string可以直接比较大小。
[1]程序设计技术第三版.重庆大学出版社.熊壮。
字符串和整数的转化:
方法1:
char buf[10];sprintf(buf, "%d", int]);将int转化为char数组,string s = buf,就转化为字符串了。
string PrintMinNumber(vector<int>& numbers) { //转化为字符串数组 vector<string> numString; for (int i = 0; i < numbers.size(); ++i) { char buf[10]; sprintf(buf, "%d", numbers[i]); string s = buf; numString.push_back(s); }
将char指针赋值给string,就可以将char数组转化为字符串。
方法2:stringstream
for (size_t i = 0; i != num.size(); ++i){ stringstream ss; ss << num[i]; str.push_back(ss.str()); }
#include<iostream> #include<string> #include<vector> #include<sstream> using namespace std; int main() { vector<int> num{ 3,32,321 }; vector<string> numToStr; for (int i = 0; i < num.size(); ++i) { stringstream ss; ss << num[i]; string s; ss >> s; cout << s << " "; } system("pause"); }
方法3:string s = to_string(int i);将整数i转化为string类型。
C++string有'\0’,但是转化为C的时候是有结尾符号的。