一、字符与整数的联系

  1. 使用ASCII码进行转换。
  2. 字符可以进行加减运算,运算的时候会转换为整数。
  3. 例题:输入一行字符,统计数字字符和字母字符出现的次数。
    #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;
    }

二、字符数组

  1. 字符串就是字符数组加上结束符'\0'。
  2. 可以使用字符串初始化字符数组,但是需要注意,每个字符串结尾会包含一个'\0'字符,因此字符数组的长度至少要比字符串的长度多 1 。

1、字符数组的输入输出

  1. 使用cin读入字符。遇到空格或者换行就停止读入了。
    #include<iostream>
    
    using namespace std;
    
    int main(){
        char str[100];
        
        cin>>str;
        cout<<str<<endl;
        
        return 0;
    }
  2. 使用fgets读入字符。可以读入一整行字符,但是遇到换行就停止读入了。
    #include<iostream>
    
    using namespace std;
    
    int main(){
        char str[100];
        
        // 使用fgets读入字符-----可以读入一整行字符-但是遇到换行会停止
        fgets(str,100,stdin);
        cout<<str<<endl;
        
        return 0;
    }
  3. 使用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、字符数组的常用操作

  1. strlen(str)----求字符串长度。
  2. strcmp(a,b)--比较两个字符串的大小。a < b返回负整数,a == b返回0,a > b返回正整数。这里的比较方式是字典序!(字典序是按照字符的ASCII比较的)。
  3. strcpy(s1,s2)-复制字符串。将后面的字符串复制给前面的。
  4. 需要包含cstring库或者string.h库。
  5. 代码:
    #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、求长度和判断是否非空

  1. empty判断字符串是否非空。
  2. size可以求字符串的长度。

3、处理string对象中的字符

可以将字符串对象当做数组来处理,通过下标访问元素。

四、例题

1、寻找字符

问题描述

给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。

思路

  1. 使用string对象,遍历每一个字符。
  2. 同时初始化一个数组,用于存储字符出现的次数,默认都为0。
  3. 遍历次数数组,找到次数为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'

思路

  1. 遍历每一个字符,将每一个字符变为后继字母。
  2. 判断当前字符是否为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;
}

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐