头歌c语言实训项目-字符数组

简介: 头歌c语言实训项目-字符数组

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

第1关:字符逆序:

题目:

代码思路:

代码表示:

第2关:字符统计:

题目:

代码思路:

代码表示:

第3关:字符插入:

题目:

代码思路:

代码表示:

第4关:字符串处理:

题目:

代码思路:

代码表示:

第5关:字符串统计:

题目:

代码思路:

代码表示:

第6关:字符串排序:

题目:

代码思路:

代码表示:


第1关:字符逆序

题目:

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

样例输入: 123456abcdef

样例输出: fedcba654321

代码思路:

这题只需要了解数字的交换,将后面的字符串和前面的字符串交换位置即可

代码表示:

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
    char a[20];
    scanf("%s", &a);
    int n = strlen(a);
    for (int i = 0; i < (n / 2); i++)
    {
        char tmp = a[i];
        a[i] = a[n - i - 1];
        a[n - 1 - i] = tmp;
    }
    printf("%s", a);
    /*********End**********/
    return 0;
}

第2关:字符统计

题目:

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

样例输入:

2

asdfasdf123123asdfasdf

asdf111111111asdfasdfasdf

样例输出:

6

9

代码思路:

如果熟练掌握了计数器http://t.csdn.cn/2yeqJ,那这题就很简单了,只需要遍历字符串判断其是否在0~9之间即可

代码表示:

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
    int n;
    scanf("%d",&n);
    for(int i =0;i<n;i++)
    {
        char a[100];
        scanf("%s",&a);
        int b = strlen(a);
        int sum = 0;
        for(int j = 0;j<b;j++)
        {
            if(a[j]>='0'&&a[j]<='9')
            {
                sum++;
            }
        }
        printf("%d\n",sum);
    }
    /*********End**********/
    return 0;
}

第3关:字符插入:

题目:

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

样例输入:

MynameisAmy

MynameisJane

样例输出:

MynameisAymy

代码思路:

这题只需要找到两个字符串的最大字符和最小字符即可,用for循环遍历出s1的最小字符,s2的最大字符,然后将s2的最大字符插入到s1最小字符的后面。

代码表示:

#include <stdio.h>
#include <string.h>
int main(void)
{
    /*********Begin*********/
    char s1[100], s2[100];
    scanf("%s%s", s1, s2);
    int i, j, mi1 = 0, mi2 = 0;
    char min1 = s1[0], max2 = s2[0];
    for (i = 1; s1[i]; i++)
        if (s1[i] < min1) 
            min1 = s1[i], mi1 = i;
    for (i = 1; s2[i]; i++)
        if (s2[i] > max2) 
            max2 = s2[i], mi2 = i;
    for (i = 0; i <= mi1; i++)
        putchar(s1[i]);
    putchar(s2[mi2]);
    for (i = mi1 + 1; s1[i]; i++)
        putchar(s1[i]);
    putchar('\n');
    /*********End**********/
    return 0;
}

第4关:字符串处理

题目:

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

样例输入:

BEIJING

123

3

样例输出:

BEI123JING

代码思路:

解决字符串插入的问题时,putchar是真的香O(∩_∩)O哈哈~,使用循环遍历+putchar可以解决很多关于插入类问题。这题只需要找到要插入元素的位置,然后插入,最后将被插入的字符串补齐即可

代码表示:

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
    char s1[100], s2[100];
    int f;
    scanf("%s", s1);
    scanf("%s", s2);
    scanf("%d", &f);
    int a = strlen(s1);
    int b = strlen(s2);
    for (int i = 0; i < f; i++)
        putchar(s1[i]);
    for (int i = 0; i < b; i++)
        putchar(s2[i]);
    for (int i = f; i < a; i++)
        putchar(s1[i]);
    /*********End**********/
    return 0;
}

第5关:字符串统计:

题目:

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

样例输入:

My name is Amy

My name is Jane

stop

样例输出:

11 name

12 name

代码思路:

解决这题,首先我们要知道gets()函数的作用

1.描述

C 库函数 char *gets(char *str) 从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

gets(str) 约等于 scanf("%s",&str) 会把读到的字符串写入数组,但又不同。

2.区别

scanf("%s",&str) :读到空格便停止。

gets(str) :一直读到敲回车(不管中间是否有空格)。

因为这题输入的有空格,所以不能使用scanf(),只能用gets()。首先我们创建两个计数器,sumLength记录总长度,partLength记录每组字符串长度,然后用max储存最长的字符串长度,Temp_Arr储存最长字符串,接着用while循环统计每段字符串的长度以及字符串总长度。统计完以后再遍历出最长的字符串存入Temp_Arr中,最后将其打印输出即可

代码表示:

#include<stdio.h>
#include <string.h>
int main(void)
{
    /*********Begin*********/
  int sumLength = 0, partLength = 0;
    char arr[1000];
    int max = 0;
    char Temp_Arr[1000];
    gets(arr);
    int i, j;
    while (strcmp(arr, "stop") != 0)
    {
        for (i = 0; i < strlen(arr); i++)
        {
            if (arr[i] != ' ')
            {
                sumLength++;
                partLength++;
            }
            else
            {
                if (partLength > max)
                {
                    max = partLength;
                }
                partLength = 0;
            }
        }
        if (partLength > max)
        {
            max = partLength;
        }
        partLength = 0;
        for (i = 0; i < strlen(arr); i++)
        {
            if (arr[i] != ' ')
            {
                partLength++;
                if (partLength == max)
                {
                    for (j = 0; j < max; j++)
                    {
                        Temp_Arr[j] = arr[j + i - max+1];
                    }
                    Temp_Arr[max] = '\0';
                    break;
                }
            }
            else
            {             
                partLength = 0;
            }
        }
        printf("%d %s", sumLength, Temp_Arr);
        printf("\n");
        sumLength = 0;
        partLength = 0;
        max = 0;
        gets(arr);
    }
    /*********End**********/
    return 0;
}

第6关:字符串排序:

题目:

题目描述:输入3行,每行n个字符串,按由小到大的顺序输出

样例输入:

cde

afg

abc

样例输出:

abc

afg

cde

代码思路:

在解决本题之前,我们需要先了解两个函数:

strcmp

函数原型:int strcmp(const char* str1, const char* str2)

头  文  件:#include <string.h>

返  回  值:str1 = str2   则返回0,

                 str1 > str2  则返回大于0的值,

                 str1 < str2  则返回小于0的值

说明:      判断两个字符串大小

因为本题是字符串比较,所以要用到strcmp函数,当s1<s2时,接着比较s2和s3的大小

进而判断s1,s2,s3的大小,当s2>s1时再一次比较,进而再次判断s1,s2,s3的大小

代码表示:

#include<stdio.h>
#include<string.h>
#define N 1024
char s1[N], s2[N], s3[N];
int main(void)
{
    /*********Begin*********/
    scanf("%s%s%s", s1, s2, s3);
    if (strcmp(s1, s2) <= 0) 
    {
        if (strcmp(s2, s3) <= 0)
            printf("%s\n%s\n%s\n", s1, s2, s3);
        else 
        {
            if (strcmp(s3, s1) <= 0)
                printf("%s\n%s\n%s\n", s3, s1, s2);
            else
                printf("%s\n%s\n%s\n", s1, s3, s2);
        }
    }
    else
    {
        if (strcmp(s1, s3) <= 0)
            printf("%s\n%s\n%s\n", s2, s1, s3);
        else 
        {
            if (strcmp(s3, s2) <= 0)
                printf("%s\n%s\n%s\n", s3, s2, s1);
            else
                printf("%s\n%s\n%s\n", s2, s3, s1);
        }
    }
    /*********End**********/
    return 0;
}
相关文章
|
11天前
|
存储 算法 C语言
【C语言】字符常量详解
字符常量是C语言中处理字符数据的重要工具。通过单引号括起一个字符,我们可以方便地使用字符常量进行字符判断、字符运算和字符串处理等操作。理解字符常量的表示方法、使用场景和ASCII码对应关系,对于编写高效的C语言程序至关重要。
58 11
|
10天前
|
存储 C语言 开发者
【C语言】格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)
在C语言中,格式化输出通过 `printf` 函数等格式化输出函数来实现。格式说明符(占位符)定义了数据的输出方式,标准ISO/IEC 9899:2024(C23)对这些格式说明符进行了详细规定。本文将详细讲解格式说明符的组成部分,包括标志字符、宽度、精度、长度修饰符和类型字符,并适当增加表格说明。
29 6
|
11天前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
47 6
|
14天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
36 5
|
14天前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
18天前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
18天前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
21天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
43 4
|
C# C语言 C++
VS2012编写C语言项目
原文:VS2012编写C语言项目 这两天看了一下C语言方面的知识,大学的时候使用的Turbo C对于我来说已经是很久之前的事情了,编写C语言的还有VC++,不过这货在64的表现实现是很让人失望,还是用最熟悉的VS吧,之前没有用VS搞过C语言,今天倒腾了一下,重点分享一下自己的过程吧。
649 0