第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、付费专栏及课程。

余额充值