字符串中字符移动的题目

本文详细探讨了一道关于字符串中字符移动的题目,从题目要求出发,深入进行问题分析,接着给出了具体的代码实现,最后进行了个人的解题总结,帮助读者理解字符串操作的算法思路。
摘要由CSDN通过智能技术生成

一、题目要求

编写一个函数,根据用户定义字符串和需要移动字符的位数n,将该字符串从右边起n个字符顺序不变的放在该字符串的前面。例如:将 helloworld 右移两位为 ldhellowor  .

二、问题分析

首先这个函数是有两个参数,字符串str和移动位数n。我在这里的思路是:先计算出该字符串的长度len,再设置一个指针p指向该字符串需移动字符的前一个字符,即字符r,开辟一个临时的数组来存放需要移动的字符,该临时数组是指针tmp指向的,然后将p指向n+1个字符处,把str中剩下的字符拷贝入tmp中,在进行此操作之前要记住需给该字符串添加一个结束标志。最后,函数需要的是输出改变后的数组,所以还需要将临时数组中存放的字符串重新拷回原字符串中输出即可。
值得提醒的一点是:这里使用了动态申请内存空间,需要引用头文件 #include<stdlib.h>,记住还需要手动释放申请空间。

三、代码实现

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

void right_str(char *str,int n)
{
	int len = strlen(str) + 1;
	char *p = str + len -1 - n;

	char *tmp = (char *)malloc(len * sizeof(char));
	if( tmp == NULL)
	{
		printf("alloc error\n");
		exit(-1);
	}

	strncpy(tmp,p,n);
	*p = 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值