字符数组与字符串

字符数组与字符串

什么是字符数组

当我们想要向计算机当中存储一句话,或者很多字符的时候,我们就会使用到字符数组

字符数组的定义如下:

char a[100] = {'0'};

与定义普通数组一样,采用 类型 变量名[] 的形式来进行定义,字符数组可以用于存储多个字符,

什么是字符串

用双引号包括起来的中间字符组成的序列叫做字符串

字符串的定义如下:

char n[] = "hello,world";

字符数组和字符串的区别:两者都是使用char来定义,区别在于字符串在存储时在末尾

存在一个'0'的结束标志,这个标志也占据数据的一个实际位置

字符串作为一个特殊的字符数组,可以按照数组元素逐个处理,也可以直接使用cin和cout语句完成输入输出

#include <iostream>

using namespace std;

int main(){
    //定义一个空字符串
    char a[] = "";

    cin >> a ; //字符串输入
    cout << a ; //字符串输出

    return 0;
}

C风格字符串函数的使用

必须包含头文件<cstring>

名称函数作用
长度strlen(s1);返回字符串s1的长度(不包含'0')
复制strcpy(s1,s2);给s1赋值,值为s2
拼接strcat(s1,s2);在s1的末尾拼接s2
比较strcmp(s1,s2);s1 == s2;返回0 s1 <   s2;返回负数s1 >   s2;返回正数
#include <iostream>
#include <cstring>

using namespace std;
int main(){
    char s1[20] = "Hello";
    char s2[20] = "World";
    char s3[20] = "";

    cout << "s1的长度为:"  << strlen(s1) << endl;
    cout << "s2的长度为:"  << strlen(s1) << endl;

    //将s1复制到s3中
    strcpy(s3,s1);
    cout << "s3的内容为:" <<  s3 << endl;
    cout << "s2的内容为: " <<  s2 << endl;

    //将s2拼接在s1的末尾
    strcat(s1,s2);
    cout << "s1的内容为:" << s1 << endl;

    return 0;
}

问题

统计字符

输入一个长度不超过100且不包含空格的字符串,统计输出这个字符串中字符'a'的个数和这个字符串中所有有效字符的个数,使用空格分割

输入:aabbcc

输出:2 6

问题分析:

1.字符串最后会有一个'0'结尾,定义一个长度为101的字符串

2.需要统计a的个数和总字符数,因此需要两个用于计数的变量

3.开始进行遍历,统计数量

#include <iostream>
#include <cstring>
using namespace std;

int main(){
    char a[101] = "";
    int k = 0,n = 0;

    cin >> a;

    for (int i = 0 ;i < strlen(a);i++){ //遍历字符数组当中的每一个数组
        if (a[i] == 'a'){
            k++;
        }

        n++;
    }

    cout << k << " " <<  n <<endl;  //输出结果
}

加密字符

输入得到一段加密后没有空格的字符串,长度不超过1000。

加密规则:所有数字字符不变,大写和小写字符之间相互转换。编写程序完成密文的解密并输出

输入:abcda

输出:ABCDA

问题分析:

1.字符串最后会有一个'0'结尾,定义一个长度为1001的字符串

2.如果字符在65-90之间,是一个大写字母,如果字符在97-122之间,则是一个小写字母,大小写字母之间间隔32

3.开始进行遍历,进行逐个转换

#include <iostream>
#include <cstring>
using namespace std;

int main(){
    char n[1001] = "";
    cin >> n;

    //开始进行遍历,逐个进行判断
    for (int i = 0;i < strlen(n);i++){
        if (n[i] >= 65 && n[i] <= 90){  //如果是大写,则加32
            n[i] = n[i] + 32;
        }

        if (n[i] >= 97 && n[i] <= 122){ //如果是小写,则减32
            n[i] = n[i] - 32;
        }
    }

    cout << n;
}

课后练习

回文字符串(P2413)

输入一个长度不超过100且不包含空格的字符串,判断这个字符串是否为回文字符串。

如果是则输出OK,否则输出ERROR

回文字符串:字符串从前向后和从后向前的字符顺序一样

输入:ocffco

输入:offfce

输出:OK

输出:ERROR

注意:请进入四曲OJ提交评测查看结果

网址:https://oj.siqulab.work/

课程反馈

最后修改:2022 年 03 月 10 日
如果觉得我的文章对你有用,请随意赞赏