C语言单词逆转

题目描述:例,输入"I am a boy!", 输出"boy! a am I"

目录

一.思路:

二:代码实现

1.字符串的输入:

2.单词逆序

三:运行演示

一.思路:

1.输入一串带有空格和符号的字符串

2.将单词逆序输出

二:代码实现

1.字符串的输入:

我们使用fgets函数输入,因为scanf函数读到空格会停止输入,不能读取完整的一句话,而gets在某些编译器中不支持,这里不推荐使用。

char arr[10000] = " ";	  
fgets(arr, 10000, stdin);  

特别提示:当我们回车输入的时候,\n也会被放入数组中,当我们逆转单词的时候需要注意这一点

2.单词逆序

1.将整体逆序,然后在将单词逆序,用下图解释

 代码如下:(以下代码用于解释题目,便于读者理解,不能正常运行)

cvoid reverse(char* arr,int left, int right)		//字符串逆序
{
	char ch = ' ';    //用于交换字符
	while (1)
	{
		if (left >= right)
		{
			break;
		}
		else
		{
			ch = arr[right];
			arr[right] = arr[left];
			arr[left] = ch;
			left++;
			right--;
		}
	}
}
int main()
{
	char arr[10000] = " ";	  
	fgets(arr, 10000, stdin);  
	int len = strlen(arr);   //先计算字符串长度
	int left = 0;            //数组下标起始位置
	reverse(arr, left, len-2);   //len - 2是有效字符的位置,len - 1是\n,这点需要特别注意

2.单词逆序:

    int tag = 0;			//用于判断空格和指定数组位置
	left = 0;
	while (arr[tag] != '\n')			
	{
		while (arr[tag] != ' ' && arr[tag] != '\n')  
		{    //当读到空格或者'\n'就需要停下来,然后去调用逆序函数这样就得到正常的单词了
			tag++;   
		}
		reverse(arr, left, tag - 1);    //tag-1是因为arr[tag]是空格,前面的元素才是需要你逆转的单词
		left = tag + 1;     //tag+1是下一个单词首元素地址
		if (arr[tag] != '\n')   //加一是去寻找下一个单词如果不加还停留在空格,就会陷入死循环
		{
			tag++;
		}
	}

三:运行演示

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

White graces

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

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

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

打赏作者

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

抵扣说明:

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

余额充值