颠倒一个句子中的词的顺序,比如将“我叫克丽丝”转换为“克丽丝叫我”, 实现速度最快,移动最少。

★颠倒一个字符串。优化速度。优化空间。
void reverse(char *str) {
  reverseFixlen(str, strlen(str));
}
void reverseFixlen(char *str, int n) {
  char* p = str+n-1;
  while (str < p) {
    char c = *str;
    *str = *p; *p=c;
  }    

}

这里先给出一个颠倒一个字符串的例子,因为颠倒一句话的词的顺序,相当于颠倒两次,第一次将整个字符串翻转,第二次将每个单词翻转例如把字符串“I   am   a   student”反转成为“tneduts   a   ma   I”,不借助任何库函数,以及把整个字符串逆序,每个单词串要再次翻。

接下来是总的程序:

★颠倒一个句子中的词的顺序

void reverseWordsInSentence(char * str) {
  int len = strlen(str);
  reverseFixlen(str, len);//这里用到了上面的函数,这里现将整几句话颠倒
  char * p = str;
  while (*p!=’\0’) {
    while (*p == ‘ ‘ && *p!=’\0’) p++;
    str = p;
    while (p!= ‘ ‘ && *p!=’\0’) p++;
    reverseFixlen(str, p-str);//这里将每句话里的已经颠倒的词再次颠倒,即为正确的词。
  }
}



接下来给出一个可以使用的完整的C++程序:

#include <cstdlib>
#include <iostream>

using namespace std;

void ReverseStr(char *begin, char *end)
{
	//reverse the whole string
     while(begin < end)
     {
		char temp = *begin;
		*begin = *end;
		*end = temp;
		begin++;
		end--;
     }
}

void Reverse(char *str)
{
	//reverse the whole string
	size_t len = strlen(str);
	ReverseStr(str, str + len - 1);

	//reverse every word
    char *p1 = str;
    char *p2 = str;
     
     while(*p2 != '\0')
     {
		while(*p2 != '\0' && *p2 != ' ')
			p2++;
			
		ReverseStr(p1, p2 - 1);

		while(*p2 == ' ')
			p2++;
		p1 = p2;
	 }
}
int main(int argc, char *argv[])
{
	char str[] = "I   am   a   student.";
	
	Reverse(str);
	
	cout<<str<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
这个例子同上个例子的算法都是一样的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值