字符串、字符数组相关问题

学习字符串之后总结两道字符数组的题目

排序名单问题

计算理工学院的每个精英班有 10 名学生,老师会依次给出 10 名学生的名字(均为不含有空格的英文字符串)。你需要将这些名字按照字典序从小到大进行输出。
输入数据
在这里插入图片描述
输出数据
在这里插入图片描述

    #include <stdio.h>
    #include <string.h>
    int main() {
    int i, j;
    char stu[10][21];//定义二维数组表示学生名字
    char temp[21];//定义一个临时数组用于交换
    for (i = 0; i < 10; i++){
        scanf("%s", stu[i]);
    }//循环输入10个学生的名字
    
    for (i = 0; i < 10; i++){
        for (j = i + 1; j < 10; j++){//从第2个开始,往后面都与第1个作比较,
            if (strcmp(stu[i], stu[j]) > 0){//如果后面的值比前面小就进行交换,保证前面的值要小于后面。
                strcpy(temp, stu[i]);
                strcpy(stu[i], stu[j]);
                strcpy(stu[j], temp);
            }
        }
    }
    
    for (i = 0; i < 10; i++){//将交换后的值输出来
        printf("%s\n", stu[i]);
    }
    
    return 0;
}

这里使用了字符串中的strcmp()函数,用于比将两个字符串的字典序大小,结果大于0表示前面的字符字符串大,小于0表示后面的字符串大,等于0表示两个字符串大小相同;
这里使用了strcpy()函数,将第二个参数的值复制到第一个参数里面去。

最长名字问题1

小明的课外班上有 N 个同学,每个同学的名字长度都不一样。请找出班上名字长度最长的同学。
输入第一行为班级同学数量 N。(0≤N≤20)
​ 接下来 N 行每行是一个同学的名字(中间没有空格,长度小于 100)
在这里插入图片描述

#include<stdio.h>
int main() {
    int N;
    char a[25][105];//定义二维字符数组
    int max_len = 0;//要找最长的,所以把最大值设为一个最小值,这样才会对比交换
    int max_idx = 0;
    scanf("%d", &N);
    for (int i = 0; i < N; i++) {
        scanf("%s", a[i]);//输入名字
        if (strlen(a[i]) > max_len) {//每次找到较长的就进行一次替换
            max_len = strlen(a[i]);
            max_idx = i;//记录每次最长值的下标
        }
    }
    printf("%s\n", a[max_idx]);//输出下标对应的名字
    return 0;
}

最长名字问题2

一个班级中有 n 个学生,每个学生有一个名字。班主任希望知道学生中名字最长(名字中的一个空格长度计为 1)的学生是谁。(带有空格的输入)

在这里插入图片描述

#include <stdio.h>
int main() {
    int n;
    char stu[105];//定义学生数组
    char max_len[105];//存放最长名字
    int i, j;
    char m;//用于输入
    scanf("%d\n", &n);//输入总人数
    for (i = 0; i < n; i++) {
        while (scanf("%c", &m) != EOF) {
        //带有空格的输入,可以使用 scanf 读入时可以逐字符读入,第一个参数使用 "%c",每行读入以 \n 字符被读入来判断结束
            if (m != '\n') {
                stu[j++] = m;//读入一个人名
            } else {
                j = 0;
                if (strlen(stu) > strlen(max_len)) {
                    strcpy(max_len, stu);//长度比较
                    break;
                }
            }
        }
    }
    printf("%s\n", max_len);
    return 0;
}

总结一下

主要就是字符串的一些操作应用。
1、strlen(string1);字符串长度函数:有一个参数,函数的参数是我们需要知道长度的字符串字面量或者变量,它返回的就是被传入参数字符串的长度
2、strcpy(string1,string2):字符串复制函数:有两个参数,函数的第二个参数是被复制的字符串,而第一个参数是复制到目标字符串变量位置。我们在使用strcpy()时要确保目标字符串的声明长度可以装的下,否则会出现段错误。,可以使用strncpy()函数。
3、strncpy(),函数增加了第三个参数”复制长度“strcpy(string1,string2,n)"
4、strcmp(),字符串比较函数:strcmp(string1,string2),如果返回值为正数,则表明string1字符串字典序大于string2;如果返回值为负数,则表明string1字符串字典序小于string2;如果相等则表明两个字符串相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值