字符数组的内容为:"student a am i";,将数组的内容改为:"i am a student"

本文介绍了一种不使用库函数实现字符串整体逆序及单词内部翻转的方法。通过自定义函数完成字符串长度获取、整体逆序及单词翻转等功能,并提供了完整的C语言代码示例。

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

有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".

要求:不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。

代码如下:

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

int my_strlen(const char str[])//编写求字符串数组长度的函数
{
	int count=0;
	while(*str++)
	{
		count++;
	}
	return count;
}

void reverse_str(char *left,char *right)
{
	assert(left);//指针进行有效性判断
	assert(right);
	while(left<right)//字符数组及要提取的字符串进行逆序
	{
		char temp=*left;
		*left=*right;
		*right=temp;
		left++;
		right--;
	}
}

void reverse(char *str)
{
	char *start=str;
	char *end=str+my_strlen(str)-1;
	char *cur=NULL;
	if(str==NULL||str[0]=='\0')//此处有两个判断条件,用或逻辑
	{
		return;
	}
	reverse_str(start,end);//逆序排列字符数组
	while(*str)
	{
		cur=str;
		while(*str!=' '&&*str!='\0')//注意此处条件是两个,包括*arr!=‘\0'
		{
			str++;
		}
		end=str-1;
		reverse_str(cur,end);
		if(*str==' ')str++;
	}
}

int main()
{
	char arr[]="student a am i";
	reverse(arr);
	printf("%s\n",arr);
	system("pause");
	return 0;
}

本文出自 “Scen” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1708644

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值