【华为OJ】【字符串右补齐】

该博客介绍了华为在线判题系统中的一道字符串处理问题——字符串右补齐。题目要求根据指定长度(len)用特定字符(src)补足输入字符串(str),保持字符串右侧填充。字符串src和str仅包含字母和数字,长度不超过256。博客提供了多个规则示例并指出这是一道初级难度的字符串操作题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

1 字符串右补齐,根据len长度补齐str到src中,并把结果输出

2 补齐规则为:

2.1 len的含义为str用src补齐后的字符串长度,不包含 '\0'

2.2 规则示例1:

输入:abcd 11 12

输出:abcd1212121

2.3 规则示例2:

输入:abcd 11 1234567890

输出:abcd1234567

2.4 规则示例3:

输入:abcd 11 1234567

输出:abcd1234567

3 字符串src和字符串str要求均为字母和数字,字符串src和字符串str的长度均不大于256

运行时间限制: 无限制

内存限制: 无限制

输入: 字符串src+空格+长度len+空格+字符串str

输出: 字符串

样例输入: abcd 11 12

样例输出:abcd1212121

本题考查知识点:字符串

本题难度:初级

#include <stdlib.h>
#include <string.h>
#include "oj.h"


/*
功能: 字符串右补齐函数
      例子:
           rpad(dest, "abcd", 10, "12"),则dest的值为"abcd121212"       解释:字符串"abcd"需要补齐足10个字符,用"12"来填充,在字符串右边填充
           rpad(dest, "abcd", 11, "12"),则dest的值为"abcd1212121"      解释:字符串"abcd"需要补齐足11个字符,用"12"来填充,在字符串右边填充
           rpad(dest, "abcd", 12, "0"), 则dest的值为"abcd00000000"     解释:字符串"abcd"需要补齐足12个字符,用"0"来填充,在字符串右边填充
           rpad(dest, "abcd", 12, " "), 则dest的值为"abcd        "     解释:字符串"abcd"需要补齐足12个字符,用空格来填充,在字符串右边填充
           rpad(dest, "abcd", 8, "1234567890"),则dest的值为"abcd1234"  解释:字符串"abcd"需要补齐足8个字符,用"1234567890"来填充,在字符串右边填充
           rpad(dest, "abcd", 3, "1234567890"),则dest的值为"abc"       解释:字符串"abcd"需要补齐足3个字符,用"1234567890"来填充,在字符串右边填充
    
输入: 1. 补齐后的字符串地址
      2. 源字符串
      3. 补齐长度
      4. 补齐内容
    
输出: 补齐后的字符串
     
返回: 无
*/


/*****************************************************************************
 Prototype    : rpad
 Description  : 字符串右补齐,根据len长度补齐str到src中,并把结果存放至dest中
 Input        : char *dest   补齐后的字符串地址
                char *src    源字符串
                int len      补齐长度
                char *str    补齐内容
 Output       : 补齐后的字符串
 Return Value : void

*****************************************************************************/
//尽量用命名当做注释
#define int_max 1024

void rpad(char *dest, char *src, int len, char *str)
{
    //首先比较src长度与补齐长度的大小
	if((NULL == dest)||(NULL == src)||(len <= 0)||(len >= int_max)||(str == NULL))
	{
		return;
	}
	* dest = '\0';
	
	int Completion_Length = 0;
	int Not_Enough_Completion_Length = 0;
	int lenSrc = strlen(src);int lenStr = strlen(str);
	for(int Traver_Compl_Array_Num = 0;Traver_Compl_Array_Num < len;Traver_Compl_Array_Num++)
	{
		if(Traver_Compl_Array_Num < lenSrc)
		{
			dest[Traver_Compl_Array_Num] = *src;
			src++;
		}
		/*else if(Traver_Compl_Array_Num >= lenSrc && Traver_Compl_Array_Num < (lenSrc + lenStr))
		{
			dest[Traver_Compl_Array_Num] = str[Completion_Length];
			Completion_Length++;
		}*/
		else
		{
			dest[Traver_Compl_Array_Num] = str[Not_Enough_Completion_Length];
			Not_Enough_Completion_Length++;
			if(Not_Enough_Completion_Length == lenStr)
			{
				Not_Enough_Completion_Length = 0;
			}
		}

	}
	 
	dest[len] = '\0';
    return;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值