# 字符数组 char a[150]; 字符数组的功能,与普通数组完全相同。 以下都是字符数组可用的: ## 字符数组的输入输出 另外,字符数组拥有字符串的特性,可以用类似字符串的语法 cin>>a;//整体输入 abcd 只能在无空格时使用 cin.getline(a,150);//整行输入 连带空格都能存 cout<<a;//整体输出 ## 字符数组的功能 使用时,确保字符数组中,存在'\0',以保证函数运行正常 ### 1、字符数组的有效长度 strlen(a);//string length 从字符数组的第一个元素开始计数,直到遇到空字符('\0',0)停止,返回计数,即长度 char c[5]={'1','2','3','4','5'}; cout<<strlen(c);//不确定 char c[5]={'1','2','3'}; cout<<strlen(c);//3 ### 2、字符数组的比较 strcmp(c1,c2);//string compare 从两个数组的第一个元素开始比较,比较ascii值的大小,直到遇到空字符('\0',0),返回数字 返回0 一样大 返回正数 c1大 返回负数 c2大 char c1[3]={'1','2','3'}; char c2[3]={'1','2','3'}; cout<<strcmp(c1,c2);//不确定 ## 字符串,默认跟随不占空间的'\0' char a[100]; cin>>a;和cin.getline(a,100);都是以字符串形式赋值,此时会自带'\0' ## 以字符串对字符数组进行初始化 char a[5]={"abcd"};//存:'a' 'b' 'c' 'd' '\0' char a[5]={"abcde"};//报错 char a[5]="abcd";//可以省略大括号 # 基础题 输入一句话(英文),对其变形输出 i love china I Love China I lovE chinA # 进阶题 输入一句话(英文),分别变形处理 i love china i evol anihc # 字符串 string 类型 字符串创建后,在内存中,存放的位置,与基本数据类型不同 输出字符串占用的空间大小,输出的不唯一 cout<<sizeof(s);//使用电脑进行输出,考试以电脑输出为准 学习字符串:是一个单独的结构,不是数组 字符串拥有与字符数组相同的功能,可以使用下标 string s; cin>>s; cout<<s; //使用下标输出时 for(int i=0;i<s.size();i++){ cout<<s[i];//s[i]代表的是字符串中,当前位置的字符 } getline(cin,s);//字符串的有空格的输入 # 字符串的函数 ## size s.size();//计算字符串中字符的数量 ## length s.length();//与s.size()没有区别 ## resize s.resize();//重置长度 > string s="abc"; > s.resize(2); > cout<<s;//ab ## compare s.compare(s2);//比较,返回下标,正s大,负s2大,0一样大 string支持使用关系运算符 > < >= <= == != string s="98"; string s2="123"; if(s>s2) cout<<s; else cout<<s2; 此时,s大,字符串比较大小,是根据ascii值比较 如果想比较字符串中代表的数据大小,怎么操作: 类型转换 int a=0; int b=0; for(int i=0;i<s.size();i++){ a=a*10+s[i]-'0'; } for(int i=0;i<s2.size();i++){ b=b*10+s2[i]-'0'; } if(a>b) cout<<s; else cout<<s2; 判断长度 if(s.size()>s2.size() || s.size()==s2.size()&&s>s2){ cout<<s; } else cout<<s2; 利用类型转换函数 ## stoi int a=stoi(s); int b=stoi(s2); if(a>b) cout<<s; else cout<<s2; ## to_string int a=56789; string s=to_string(a);//"56789" ## substr 字符串截取 string s="123456789"; //012345678 cout<<s.substr(5);//从下标5开始,截取到最后 "6789" cout<<s.substr(3,4);//从下标3开始,截取长度为4 "4567" //从头开始 保留5位长度 cout<<s.substr(0,5); substr 不改变原来的字符串 s.resize(5); resize 改变原来的字符串 ## find 查找某个字符或某个字符串,在当前字符串中的位置 输入: abcdefg c def 输出 2 3 string s; string ss; cin>>s; cin>>ss; cout<<s.find(ss);//从s中查找ss出现的位置 找到了,返回ss第一个字母的下标 没找到,返回unsigned long long 的最大值 string s="a"; string s2="b"; cout<<s.find(s2); //判断一个字符串中是否包含xxx if(s.find(xxx)<s.size()){ 包含 } # 【cin.getline 和 getline】 与cin混用错误 int a; string s; cin>>a; cin.ignore();//清空黑框缓冲垃圾 getline(s); //cin.getline(c,100); # 去除多余空格 ## 方案一 string s; getline(cin,s); for(int i=0;i<s.size();i++){ if(s[i]!=' ') cout<<s[i]; else{ int c=0; for(int j=i;j<s.size();j++){ if(s[j]==' ') c++; else break; } cout<<' '; i+=c-1; } } ## 方案二 string s; getline(cin,s); for(int i=0;i<s.size();i++){ if(s[i]==' '&&s[i-1]==' ') continue; else cout<<s[i]; } ## 方案三 string s; while(cin>>s){ cout<<s<<" "; } |