华为机试每日一练--第三题:字符串分隔

目录

问题描述

输入描述:

输出描述:

解题分析

 代码实现


问题描述

•连续输入字符串,请按长度为8拆分每个输入字符串并进行输出;

•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述:

连续输入字符串(每个字符串长度小于等于100)

输出描述:

依次输出所有分割后的长度为8的新字符串

解题分析

    对于这道题,难点在于如何把字符串分割开来,同时还要判断是否长度小于8

    我们可以采用递归的方法,每一次递归中值打印字符串前八个字符,同时把字符串中第九个字符的位置传给下一个递归函数,直到字符串的末尾

        当我们写递归函数是必须要注意两点:1、递归结束条件   2、把问题分解成为规模更小的、具有与原问题有着相同解法的问题

        接下来让我们开始写递归函数,因为我们要把字符串的首元素地址传递过去,所以要用字符指针接收且返回值类型为void(我们只需要打印就行了,所以不需要接收返回值)。

        首先我们要先定义递归的结束条件,当函数接收的地址解引用后发现是'\0'时就直接return 结束本次递归。

        第二步因为我们要打印长度为8的字符串,所以我们要用strlen函数判断字符串长度的大小。如果比8大,那就把while八次,每次打印字符并对字符地址++。如果比8小,那就以解引指针为条件(字符串结尾有'\0',‘\0’判断为假),while循环每次循环都打印字符串,然后根据字符大小补充0。

        第三步就是递归了,这时就把中字符串的前八个字符打印了出来,或者总字符已经打印完。接下来就是把字符指针继续传递给该函数一直进行判断,直到指针指向'\0'为止。

下面图示过程

 代码实现

#include<stdio.h>
#include<string.h>

void print(char* ret)
{
	if (*ret == '\0')
	{
		return ;
	}
	int len = strlen(ret);
	if (len > 8)
	{
		int i = 8;
		while (i)
		{
			printf("%c", *ret);
			ret++;
			i--;
		}
		printf("\n");
	}
	else {
		while (*ret != '\0')
		{
			printf("%c", *ret);
			ret++;
		}
		for (int i = 0; i < 8 - len; i++)
		{
			printf("0");
		}
	}
	print(ret);
}
int main()
{
	char str[100] = { 0 };
	scanf("%s", str);
	print(str);

	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱躺平的威威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值