字符数组内容倒序的模拟实现

本文介绍了如何在不使用库函数且仅开辟有限空间的情况下,将字符数组内容从'student a am i'倒序变为'i am a student'的详细步骤和程序实现。

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

1、有一个字符数组的内容为:“student a am i”,
请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。

student a am i
i ma a tneduts
i am a student
2、程序

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

void reverse_sentence(char* arr)
//翻转整个句子,自行查找句子末位处的地址,不利用strlen函数
{
	char* start = arr;
	char* end = arr;
	//先找到数组收尾地址
	while (*arr)
	{
		arr++;
	}
	arr--;
	end = arr;
	while (start<end)
	{
		char temp = *start;
		*start = *end;
		*end = temp;
		start++;
		end--;
	}//交换
}
void reverse_word(char* arr)//翻转单词
{
	while (*arr)
	{
		char* word_start = arr;
		char* word_end = arr;
		while ((*arr != ' ') && (*arr != '\0'))
		{
			arr++;
		}//1.通过空格或者字符串的结束符先找到单词的结束地址

		//arr--;
		word_end = arr;
		word_end--;//2.因为存在空格,故对于翻转的单词地址需要减1

		while (word_start < word_end)//3.对单词进行翻转
		{
			char word_temp = *word_start;
			*word_start = *word_end;
			*word_end = word_temp;
			word_start++;
			word_end--;
		}
		if (*arr == '\0')//4.如果当前句子里面所有单词都翻转完毕,则此时*arr=='\0',必须结束程序,否则arr++访问出问题
		{
			break;
		}
		arr++;//5.找到下一个要翻转的单词首地址
	}
}
int main()
{
	char arr[] = "student a am i";
	printf("%s\n", arr);
	reverse_sentence(arr);
	printf("%s\n",arr);
	reverse_word(arr);
	printf("%s\n", arr);
	system("pause");
	return 0;
}

3、结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值