C++语法基础--字符串
本文介绍了字符处理的相关知识,主要包括:1. 字符与整数的转换关系,通过ASCII码实现字符运算;2. 字符数组的定义和使用方法,包括输入输出、常用操作(strlen、strcmp、strcpy)及遍历;3. string字符串的操作,如初始化、比较、拼接、长度判断等;4. 两个实例:统计字符出现次数和字符替换。文章通过代码示例详细说明了字符处理的各种应用场景和实现方法。
·
一、字符与整数的联系
- 使用ASCII码进行转换。

- 字符可以进行加减运算,运算的时候会转换为整数。
- 例题:输入一行字符,统计数字字符和字母字符出现的次数。
#include<iostream> using namespace std; int main(){ char a[20]; // 读字符 for(int i = 0; i < 20; i ++){ cin>>a[i]; } // 初始化数量为0 int count_C = 0, count_N = 0; // 判断边界 for(int i = 0; i < 20; i++){ if(a[i] >= 'a' && a[i] <= 'z' ||a[i] >= 'A' && a[i] <= 'Z'){ count_C ++; } if(a[i] >= '0' && a[i] <= '9'){ count_N ++; } } cout<<count_N<<endl; cout<<count_C<<endl; return 0; }
二、字符数组
- 字符串就是字符数组加上结束符'\0'。
- 可以使用字符串初始化字符数组,但是需要注意,每个字符串结尾会包含一个'\0'字符,因此字符数组的长度至少要比字符串的长度多 1 。
1、字符数组的输入输出
- 使用cin读入字符。遇到空格或者换行就停止读入了。
#include<iostream> using namespace std; int main(){ char str[100]; cin>>str; cout<<str<<endl; return 0; } - 使用fgets读入字符。可以读入一整行字符,但是遇到换行就停止读入了。
#include<iostream> using namespace std; int main(){ char str[100]; // 使用fgets读入字符-----可以读入一整行字符-但是遇到换行会停止 fgets(str,100,stdin); cout<<str<<endl; return 0; } - 使用getline读入字符。可以读入一行字符,遇到换行就停止读入。
#include<iostream> #include<string> using namespace std; int main(){ char str[100]; // c风格 cin.getline(str,100); // c++风格----str必须为string类型 // getline(cin,str); cout<<str<<endl; return 0; }
2、字符数组的常用操作
- strlen(str)----求字符串长度。
- strcmp(a,b)--比较两个字符串的大小。a < b返回负整数,a == b返回0,a > b返回正整数。这里的比较方式是字典序!(字典序是按照字符的ASCII比较的)。
- strcpy(s1,s2)-复制字符串。将后面的字符串复制给前面的。
- 需要包含cstring库或者string.h库。
- 代码:
#include<iostream> #include<cstring> using namespace std; int main(){ char s1[20], s2[20]; cin>>s1; cin>>s2; cout<<strlen(s1)<<" "<<strlen(s2)<<endl; cout<<strcmp(s1,s2)<<endl; strcpy(s1,s2); cout<<s1<<endl; return 0; }
3、字符数组的遍历
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char a[100];
cin>>a;
int len = strlen(a);
for(int i = 0; i < len; i++){
cout<<a[i]<<endl;
}
return 0;
}
三、字符串
可变长的字符序列,比字符数组更加好用。需要引入string库。
1、定义和初始化
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1; // 默认s1是一个空字符串
string s2 = s1; // s2和s1的值相同
string s3 = "hiya";
return 0;
}
2、string上的操作
1、读写
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
cin>>s;
cout<<s<<endl;
return 0;
}
2、比较
常见的>,<,==,!=,>=,<=都可一使用。按照字典序比较。
3、赋值
#include<iostream>
#include<string>
using namespace std;
int main(){
string s1,s2;
cin>>s1;
cout<<s1<<endl;
s2 = s1;
cout<<s2<<endl;
return 0;
}
4、拼接
两个字符串拼接用+
#include<iostream>
#include<string>
using namespace std;
int main(){
string s1,s2,s3;
cin>>s1;
cin>>s2;
cout<<s1<<endl;
cout<<s2<<endl;
s3 = s1 + s2;
cout<<s3<<endl;
return 0;
}
5、求长度和判断是否非空
- empty判断字符串是否非空。
- size可以求字符串的长度。
3、处理string对象中的字符
可以将字符串对象当做数组来处理,通过下标访问元素。
四、例题
1、寻找字符
问题描述
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。
思路
- 使用string对象,遍历每一个字符。
- 同时初始化一个数组,用于存储字符出现的次数,默认都为0。
- 遍历次数数组,找到次数为1的位置,对应到string对象中。如果没有输出no。
代码
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
cin>>s;
int a[26] = {0};
int length = s.size();
// 将每个字符出现的次数存储在数组中
for(int i = 0; i < length; i++){
a[(s[i] - 'a')] ++;
}
// 遍历次数寻找第一个只出现一次的字符
for(int i = 0 ;i < length; i++){
if(a[(s[i] - 'a')] == 1){
cout<<s[i]<<endl;
return 0;
}
}
cout<<"no"<<endl;
return 0;
}
2、替换字符
问题描述
密码翻译,输入一个只包含小写字母的字符串,将其中的每个字母替换成它的后继字母,如果原字母是'z',则替换成'a'
思路
- 遍历每一个字符,将每一个字符变为后继字母。
- 判断当前字符是否为z如果是则变为a。
代码
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
cin>>s;
int length = s.size();
for(int i = 0; i < length; i++){
if(s[i] == 'z'){
s[i] = 'a';
}else{
s[i] = s[i] + 1;
}
}
for(int i = 0; i < length; i++){
cout<<s[i];
}
return 0;
}
更多推荐

所有评论(0)