第4题 颠倒一个句子中的词的顺序

题目: 颠倒一个句子中的词的顺序,比如: I am a student

颠倒后变成:student a am I



此题紧接着第3题,不过要把第3题的函数做一定修改

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

char* reverse(char* str, int n)
{
		int end = n - 1;
		int start = 0;

		while(start<end)
		{
			str[start] ^= str[end];
			str[end] ^= str[start];
			str[start] ^= str[end];
												
			++start;
			--end;
		}

		return str;
}

char* reverse_word(char* str) {
	char* p1 = reverse(str, strlen(str));
	char* p2;
	while(*p1 != '\0') {
		while(*p1 == ' ' && *p1 != '\0')	p1++;
		p2 = p1;
		while(*p1 != ' ' && *p1 != '\0' )	p1++;
		reverse(p2, p1-p2);
		
	}

	return str;

}


int main()
{
		char str[] = "my name is steve marbo";
		printf("before reverse:\n");
		printf("%s\n", str);
		printf("after reverse:\n");
		puts(reverse_word(str));
}

reverse函数的第二个参数n,是需要倒置的字符串的长度

 reverse_word(char* str) 的思路是这样的:

假定一个字符串  I am a student

第一步:先把整个字符串倒置得到   tneduts a ma I

第二步:以空格作为分割符,倒置相邻两个空格中的内容


所以,在reverse_word(char* str)中,p1指向下一个空格的位置,p2指向前一个空格的位置,然后颠倒p2~p1之间字符串的顺序,也就相当于把一个单词的顺序正过来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值