【头歌C语言程序与设计】字符数组

这篇具有很好参考价值的文章主要介绍了【头歌C语言程序与设计】字符数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

写在前面

正文

第1关:字符逆序

第2关:字符统计

第3关:字符插入

第4关:字符串处理

第5关:字符串统计

第6关:字符串排序

写在最后


写在前面

本文代码是我自己所作,本人水平有限,可能部分代码看着不够简练,运行效率不高,但都能运行成功。另外,如果想了解更多,请订阅专栏头歌C语言程序与设计


正文

第1关:字符逆序

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

样例输入: 123456abcdef

样例输出: fedcba654321

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
   char str[20]={0};
   int i=0;
   gets(str);
   int len=strlen(str);
   for(i=len-1;i>=0;i--)
   {
       printf("%c",str[i]);
   }
    /*********End**********/
    return 0;
}

第2关:字符统计

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

样例输入:

2

asdfasdf123123asdfasdf

asdf111111111asdfasdfasdf

样例输出:

6

9

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int n=0,i=0,j=0,count=0;
   
    char str[5][40]={0};
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",&str[i]);
    }
    
    for(i=0;i<n;i++)
    {
       j=0;
       count=0;
       while(str[i][j]!='\0')
       {
          if(str[i][j]>='0'&&str[i][j]<='9')
             count++;
          j++;
       }
      printf("%d\n",count);
    }
    
    /*********End**********/
    return 0;
}

第3关:字符插入

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

样例输入:

MynameisAmy

MynameisJane

样例输出:

MynameisAymy

#include <stdio.h>
#include <string.h>
int main(void)
{
    /*********Begin*********/
    int i=0,j=0;
    char MAX,MIN;
    char str1[100]={0};
    char str2[100]={0};
    gets(str1);
    gets(str2);
    int len1=strlen(str1);
    int len2=strlen(str2);
    //找最大字符
    MAX=str2[0];
    for(i=0;i<len2;i++)
    {
        if(MAX<str2[i])
            MAX=str2[i];
    }
    //找最小字符
    MIN=str1[0];
    for(i=0;i<len1;i++)
    {
        if(MIN>str1[i])
        {
            MIN=str1[i];
            j=i;
        }    
    }
    
    for(i=len1-1;i>j;i--)
    {
       str1[i+1]=str1[i];
    }
    str1[j+1]=MAX;
    
       printf("%s",str1);
    /*********End**********/
    return 0;
}

第4关:字符串处理

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

样例输入:

BEIJING

123

3

样例输出:

BEI123JING

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
    char s1[200],s2[200];
    int i,n;
    gets(s1);
    gets(s2);
    scanf("%d",&n);

    strcat(s2,s1+n);//把s1中n之后的字符串接到s2中
    strcpy(s1+n,s2);//把s2整体复制到s1的n之后

    printf("%s",s1);
    /*********End**********/
    return 0;
}
//本关使用字符串函数比较简单些

第5关:字符串统计

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

样例输入:

My name is Amy

My name is Jane

stop

样例输出:

11 name

12 name

变量作用须知:

i 用于倒序遍历字符串

WordLength 用于记录字符串中`单个单词的长度`

LongestWord 记录单词长度中的最大值

LongestWord_mark 记录最长单词的下标,方便后面打印输出

count 记录字符串中`所有单词的总长度`(不包含空格)——这就要求遍历一个非空格字符,count要+1

大题思路是,倒序遍历,遇到字符,单词长度+1和字符个数+1,遇到空格,记录最大单词长度,并将单词长度清零
下面拿实际例子来说,至于为什么倒着遍历,还得多看看题目的一个小要求😀
My name is Jane
stop
1.拿这个例子举例,首先输入My name is Jane,倒着从e遍历,遇到字符会执行这段代码,遍历M后循环结束
    if(a[i]!=' ')
    {
       WordLength++;
       count++;
    }
2.中途遇到空格,会执行这段代码,更新一下LongestWord和LongestWord_mark,WordLength重置为0,方便记录下一个单词的长度
    if(WordLength >= LongestWord)
    {
          LongestWord=WordLength;
          LongestWord_mark=i //记录最长单词前的空格的下标
    }
    //遇到空格之后,单词长度重置
    WordLength=0;
3.但是这样会有问题,遍历完M这时,需要执行1来计数,也需要执行2来判断最长单词,但实际上只会执行1
    既执行1又执行2,但是if-else语句只执行其一
    我的想法是将遍历到M的情况单独讨论,禁止在1中执行,而在2中单独列出来
#include<stdio.h>
#include <string.h>
int main( )
{
   int i,WordLength=0,LongestWord_mark,count,LongestWord;
   char a[1000];
   //输入一行,判断一次,打印一次
   while(1)
   {
      //输入
      gets(a);
      count=0,LongestWord=0,LongestWord=0,WordLength=0;  
      //终止条件
      if(strcmp(a,"stop")==0)
        break;
      //倒序遍历
      for(i=strlen(a)-1;i>=0;i--)
      {
         //处理字符(首字符除外)
         if(a[i]!=' '&& i!=0)
         {
            WordLength++;
            count++;
         }
         //处理空格和首元素
         else
         {
            if(i==0)
            {
               count++;
               WordLength++;
            }
            //将最长单词前,空格的下标记录
            if(WordLength >= LongestWord)
            {
                LongestWord=WordLength;
                LongestWord_mark=i+1;
                //应对最长单词是首单词的情况
                if(i==0)
                {
                  LongestWord_mark=i;
                }
            }
            //遇到空格之后,单词长度重置
            WordLength=0;
          }
       }
        
       //输出
       printf("%d ",count);
       for(i=LongestWord_mark;i<LongestWord_mark+LongestWord;i++)
           printf("%c",a[i]);
       printf("\n");
   }
   return 0;
}

第6关:字符串排序

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

样例输入:

cde

afg

abc

样例输出:

abc

afg

cde

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
    char str[4][35];
    int i;
    for(i=0;i<3;i++)
       gets(str[i]);
    if(strcmp(str[0],str[1])>0)
    {
        strcpy(str[3],str[1]);
        strcpy(str[1],str[0]);
        strcpy(str[0],str[3]);
    }
    if(strcmp(str[0],str[2])>0)
    {
        strcpy(str[3],str[2]);
        strcpy(str[2],str[0]);
        strcpy(str[0],str[3]);
    }
    if(strcmp(str[1],str[2])>0)
    {
        strcpy(str[3],str[1]);
        strcpy(str[1],str[2]);
        strcpy(str[2],str[3]);
    }
    for(i=0;i<3;i++)
       printf("%s\n",str[i]);
    /*********End**********/
    return 0;
}

写在最后

👍🏻点赞,你的认可是我创作的动力!

⭐收藏,你的青睐是我努力的方向!

✏️评论,你的意见是我进步的财富!文章来源地址https://www.toymoban.com/news/detail-488162.html

到了这里,关于【头歌C语言程序与设计】字符数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实验五 C语言函数程序设计习题 (使用函数计算两点间的距离,请编写函数fun,使用函数输出字符矩阵,使用函数求最大公约数和最小公倍数)

    1. 使用函数计算两点间的距离:给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离(保留2位)小数。要求定义和调用dist(x1,y1,x2,y2)计算两点间的距离。坐标中两点坐标之间的距离公式如下: 2. 请编写函数fun,它的功能是计算并输出给定整数n的所有因子(不包括1与自身)

    2024年02月04日
    浏览(54)
  • C语言柔性数组详解:让你的程序更灵活

    仔细观察下面的代码,有没有看出哪里不对劲? 还有另外一种写法: 你应该一眼就看到了,结构体的最后一个成员数组的写法是 int arr[]; 或者是 int arr[0] ,这两种写法是等价的,意思是这个数组的大小是 不确定的、未知的、可以变化的 。 C99允许这种特殊的结构体存在。这

    2024年02月09日
    浏览(44)
  • 【软件设计师07】程序设计语言与语言处理程序基础

    编译与解释、文法、正规式、有限自动机、表达式、传值与传址、多中程序语言特点 (逐渐降低考察比例,很少考察) 概念 文法类型 语法推导树 有限自动机 与正规式(重点) 常见问题:给一个串比如01、10、001等,看图中起点到终点能否连起来得到这样的串 正规式 是有限自

    2023年04月08日
    浏览(62)
  • 【C语言_题库】C语言:编写一个程序,输入一组字符串,将字符串中的小写字母转换为大写字母,其它字符不变,并输出。

    【问题描述】 从键盘输入一行英文字符串,把所有小写字母变成大写字母,其他字母和字符保持不变。 【输入形式】 输入一行字符串,含大小写。 【输出形式】 输出大写字母形式。 【样例输入①】 hello,world. 【样例输出①】 result:HELLO,WORLD. 【样例输入②】 hello,China. 【样例

    2024年02月07日
    浏览(152)
  • Java语言程序设计课程设计

    Java语言程序设计课程设计 一、 java语言程序设计课程设计要求: (1)java语言课程设计软件设计要求 1.题目不做严格限定,可自行选择题目来完成。 2.模块化程序设计 3.锯齿型书写格式 4.必须上机调试通过 (2)撰写课程设计报告,内容包括: 1.课程设计题目; 2.需求分析;

    2024年02月08日
    浏览(46)
  • C语言程序设计——设计一个学生管理系统(完美运行的程序(●‘◡‘●))

    通过c语言设计一个学生管理系统,要求有直观的主菜单,可以录入学生的信息,实现添加学生信息、显示学生信息、查找学生信息、删除学生信息、修改学生信息以及退出等功能。 1、首先因为学生有以下几个基本信息:姓名、年龄、学号、性别,依次由name、age、id和sex来表

    2024年02月08日
    浏览(48)
  • 【高级程序设计语言C++】特殊类设计

    拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 用C++11的话,可以使用特殊的语法来实现一个不能被拷贝的类。在C++11中,可以使用删除函数(deleted function)来禁用拷

    2024年02月10日
    浏览(51)
  • 南京邮电大学汇编语言程序设计实验二(用户登录验证程序的设计)

    1.掌握循环程序的编写以及结束循环的方法。 2.掌握DOS、BIOS功能调用的使用方法。 用户登录验证程序的实现 程序执行后,给出提示操作,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符;只有当用户键入的用户名,密码字符串和程序内定的字符串相同时

    2023年04月18日
    浏览(57)
  • Python语言程序设计 习题1

    一、选择题 1.python语言属于(C) A.机器语言    B.汇编语言   C.高级语言   D.科学计算语言 2.下列选项中,不属于python特点的是(B) A.面向对象   B.运行效率高   C.可读性好   D.开源 3.python程序文件的扩展名是(D) A.  .python   B.  .pyt    C.   .pt    D.   .py 4.以下叙述

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包