数组(下)

目录

字符逆序

字符统计 

字符插入


 

经过前面的两篇文章,已经了解到了数组的基本用法和一些常见数组类型。接下来将以几个题型来进行实战说明。

字符逆序: 

 以头歌EduCoder平台上的实验9字符数组中的第一关:字符逆序为例

 

解题思路:先将要输入的字符串依次存入字符数组中(从首地址开始),利用getchar()函数可以很好的将字符串存入字符数组中,再将数组的元素进行逆序输出。

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
   char a[100], c;
   int i = 0;//这里i即是作为索引存储读取的ch的值,也是在记录输入的字符的个数
   while ((c = getchar()) != EOF && c != '\n')
   {
      a[i] = c;
      i++;//i自加
   }
   //这边只要从i-1开始是因为在最后一次有效输入后i仍然进行了一次自加
   for (int k = i-1; k >= 0; k--)
      printf("%c", a[k]);
    /*********End**********/
    return 0;
}

需要注意的是k从i-1开始赋值,EOF是文字流的结尾(定义的一个常量),一般值为-1,题目中的结束也可能是换行 因为题目说了是一行字符串。
 

字符统计 :

任务描述

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

相关知识(略)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。

输入 输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。

输出 对于每个测试实例,输出该串中数值的个数,每个输出占一行。

测试说明

样例输入:

2

asdfasdf123123asdfasdf

asdf111111111asdfasdfasdf

样例输出:

6

9


开始你的任务吧,祝你成功!

解题思路:首先我们进行审题,程序主要目的是想要统计字符串中数字的个数,再看样例输入,由字母和数字组成。所以,我们只需要统计出数字的个数,再进行自增操作,这样就可以满足程序的要求,而还需要注意的是需要输入一个整数n,表示测试的个数。比如题目中给定的是数字2,则共有2组数据需要进行测试统计。 

#include <stdio.h>
int main(void)
{
   /*********Begin*********/
char a[100];
int n;
scanf("%d",&n);//接收n值
while(n--)
{
int count=0;
scanf("%s",a);//注意此处是用scanf函数接收字符串,不需要使用&符
for(int i=0;a[i] !='\0';i++)
 {
   if(a[i]>='0' && a[i]<='9')
     count=count+1;
 }
   printf("%d\n",count);//输出count的值,达到统计数字的目的
}
   /*********End**********/
return 0;
}

字符插入:

任务描述

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

相关知识(略)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。

输入

输入一段文字

输出

输入两个字符串ab。

测试说明

样例输入:

MynameisAmy

MynameisJane

样例输出: MynameisAymy

提示: 字符串长度不超过100

注意:使用gets()**函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。 **推荐使用:fgets()函数。


开始你的任务吧,祝你成功!

解题思路: 利用gets()函数接收两个字符串,找出a字符串的最小字符,找出b字符串的最大字符,

再将b的最大字符赋值给a的最小字符,最终输出a语句。我们在找最小字符和最大字符时,先利用strlen函数计算a,b的长度,再分别比较a,b中的字符大小,从而将最小赋值给min,最大赋值给max。

#include <stdio.h>
#include <string.h>
int main(void)
{
   /*********Begin*********/
char a[50],b[50];
int m,n,min,max,i,j;
gets(a);
gets(b);
m=strlen(a);//算出a的长度
n=strlen(b);//算出b的长度
for(i=0,min=0;i<m;i++)
 if(a[min]>a[i])
   min=i;//找出a的最小字符
for(i=0,max=0;i<n;i++)
 if(b[max]<b[i])
   max=i;//找出b的最大字符
for(j=m+1;j>min;j--)
 a[j]=a[j-1];//将a的最小字符向后退一个
 a[j+1]=b[max];
  puts(a);
  /*********End**********/
return 0;
}


以上部分代码借鉴了其他博主的内容,并无其他目的,若有侵权行为,请私聊我删除。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值