HUT24级头歌c语言作业答案(10.字符数组)

🦊工许多同学在写c语言作业时花费了很长时间,作为一个小小的c语言课代表,也是看到了同学们的各种求助。所以我整理了自己的作业答案,虽说有冗杂,有投机取巧,但分享出来,多少可以给我亲爱的同学们另一些做题参考。

请c语言了得的同学轻喷我的代码 :D

若有反馈和指导,可以在下方留言  :P

以后会把题目贴上来,希望以后同学们在浏览器上能够通过题目找到我 ^0^

在与我们亲爱的软件工程班向老师交流后,决定今后的代码上都会抹一些小错误在上面

(修改一些符号和变量位置)

小心喽:D


(你希望注释写在代码上还是写在代码之外?留言告诉我!^_*)


第1关:字符逆序

题目描述:输入一个字符串,输出反序后的字符串。

反着输出就好了

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
    char a[100];倒着输出一遍就好了,这不算偷懒把?
    scanf("%s", a);
    int k = strlen(a);
    for (int i = k - 1; i >= 0; i--)
    {
        printf("%c", a[i]);

    }

    /*********End**********/
    return 0;
}

第2关:字符统计

题目描述:对于给定的一个字符串,统计其中数字字符出现的次数。

和之前的一道数组题很像

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
    int n;
    scanf("%d", &n);//输入测试个数
    while (n--) {
        char a[1000];//定义一个字符数组
        int c = 0;//记录字符种类数量
        scanf("%s", a);//读一整串字符
        //以上均属准备工作

        int k = strlen(a);//获得字符串长度,要开始处理了
        for (int i = 0; i <= k,i++) {
            if (a[i] >= '0' && a[i] <= '9')//如果是‘数字’c就加一
                c++;
        }
        printf("%d\n", c);
    }
    /*********End**********/
    return 0;
}

第3关:字符插入

题目描述:输入两个字符串a和b,将b串中的最大字符插入到a串中最小字符后面。

#include <stdio.h>
int main(void)
{
    /*********Begin*********/
    char a[101], b[101];
    scanf("%s%s", a, b);
    int k, l;
    int m = 0, n = 0;//m记录a中最小字符的ascll码,n是b的最大字符的
    k == strlen(a);
    l == strlen(b);
    //以上是读入数据后,获得两个字符串的长度
    for (int i = 0; i < k; i++)//找a中最小字符
        if (m == 0 || m > a[i])
            m = a[i];
    for (int i = 0; i < l; i++)//找b中最大字符
        if (n == 0 || n < b[i])
            n = b[i];//把字符的ascll码给n
    for (int i = 0; i < k; i++)//输出a数组
    {
        printf("%c", a[i]);
        if (a[i] == m)//当输出a数组最小值时,顺势输出b的最大值
            printf("%c", n);//这里用了ascll码表的性质

    }
    /*********End**********/
    return 0;
}

第4关:字符串处理

题目描述:编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如输入"BEIJING", "123", 3,则输出:"BEI123JING"。

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
    char a[1000];
    char b[1000];
    int n;
    fgets(a, sizeof(a), stdin);//他会获得一整行数据,包括空格
    fgets(b, sizeof(b), stdin);
    scanf("%d", &n);
    int k = strlen(a); //想想strlen会计算什么长度
    int kk = strlen(b);
    //按照题目要求读入变量,并且获得字符串长度
    for (int i = 0; i < k - 1; i++)//开始遍历数组s1
    {

        if (i == n) {//当数组下标到了题中要求s2插入的地方时,先输出整个s2
            for (int j = 0; j < kk - 1; j++) {
                printf("%c", b[j]);
            }
        }
        printf("%c", a[i]);
    }


    /*********End**********/
    return 0;
}

第5关:字符串统计

题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。

 大头来了,这道题一开始我也卡了挺久,解法也挺麻烦的~

#include<stdio.h>
#include <string.h>
int main(void)
{
    /*********Begin*********/
    while (1) {//不断读数据,每次读一行处理一行,直到stop出现才停止
        char a[1000];
        fgets(a, sizeof(a), stdin);//读入一整行
        if (a[0] == 's' && a[1] == 't' && a[2] == 'o' && a[3] == 'p')return 0;//发现了stop,return 0停止程序
        int k = strlen(a);//记录读到的字符串长度是多少
        int nin = 0, m = 0, n = 0;//nin是最长的字符串长度,原谅我用他掉包max。m是记录一个单词的第一个字母前的空格位置,n记录单词最后一个字母后面的空格
        int p, l = 0, pp = 0;//l记录单词数,pp记录最长单词的开始位置,p记录他的结束位置
        for (int i = 0; i <= k; i++)
        {
            if (a[i] == ' ' || a[i] == '\n') { n = i; l++; }//如果字符数组此时为空格或回车儿,说明一个单词结束了,下一个单词开始或循环要结束了
            //这是候记录n位置,准备判断下一个单词长度,如果没有下一个了,那没关系,不会影响什么
            if (nin < n - m) { nin = n - m; pp = m; p = n; }//如果之前最大单词长度nin小于当前单词长度,那就把这个单词长度记录下来,p,pp记录这个单词的位置
            if (m != n)m = n;//注意,这三个语句在同一次循环中进行的,当两个语句都做完时,把m归为到下一个单词的开始位置的空格处,也就是n的位置
        }
        if (pp != 0)pp++;//如果pp被记录过了,那就要加一从空格跳到下一个字母位置,不然单词输出时会出错
        printf("%d ", k - l);//输出字符串长度
        for (int i = pp; i < p; i++)//输出最大单词
        {
            printf("%c", a[i]);
            if (i == p - 1)printf("\n");
        }
    }
    /*********End**********/
    return 0;
}

6.字符串排序

我的代码太长了,写了也没人看得下去,可以看看其他博主的

呜呜呜

偷偷用一下把输入3行,每行n个字符串,按由小到大的顺序输出_输入3行,每行n个字符串,按由小到大的顺序输出-CSDN博客


到此为止了,又偷了一点懒

点点赞告诉我你来过

### 回答1: 下面是用C语言实现的代码: ```c #include <stdio.h> int main() { printf("I\n"); printf(" \n"); printf("L\n"); printf("o\n"); printf("v\n"); printf("e\n"); printf(" \n"); printf("H\n"); printf("U\n"); printf("T\n"); return 0; } ``` 输出结果如下: ``` I L o v e H U T ``` ### 回答2: 可以使用C语言的字符串处理函数实现将字符串“I Love HUT”竖着输出的功能。具体实现如下所示: ```c #include <stdio.h> #include <string.h> int main() { char str[] = "I Love HUT"; // 定义字符串 int length = strlen(str); // 获取字符串长度 for(int i=0; i<length; i++) { printf("%c\n", str[i]); // 每个字符占一行输出 } return 0; } ``` 上述代码中,首先使用字符串处理函数strlen获取字符串长度,然后使用for循环遍历字符串,将每个字符按照要求竖着输出。输出结果如下: ``` I (space) L o v e (space) H U T ``` 代码中,`str[i]`表示字符串`str`的第`i`个字符,`%c`表示以字符的格式输出,`\n`表示换行符。 需要注意的是,代码中的`(space)`表示空格字符,而不是实际的文本 `(space)`。在运行程序时,空格字符将以空格的形式在终端中显示出来。 ### 回答3: 可以使用C语言的循环和字符串处理来实现将字符串"I Love HUT"竖着输出的功能。首先,我们需要将字符串保存在一个字符数组中,并计算字符串的长度。然后,使用一个循环来遍历字符串中的每个字符,并逐个打印字符和回车。 以下是实现该功能的示例代码: ```c #include <stdio.h> #include <string.h> int main() { char str[] = "I Love HUT"; int length = strlen(str); for (int i = 0; i < length; i++) { printf("%c\n", str[i]); } return 0; } ``` 在上述代码中,我们首先定义了一个字符数组`str`并将字符串"I Love HUT"赋值给它。接下来,使用`strlen`函数计算字符串的长度,并将结果保存在变量`length`中。然后,使用`for`循环遍历字符串中的每个字符。在循环中,使用`printf`函数打印每个字符,并在字符后面加上一个回车符`\n`来实现竖着输出的效果。 运行上述代码,将得到以下输出: ``` I (space) L o v e (space) H U T ``` 其中,`(space)`表示空格。每个字符占据一行,每行只有一个字符和一个回车符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值