方法一:
// 程序员面试100题(算法)之翻转句子中单词的顺序
#include "stdafx.h"
#include<iostream>
using namespace std;
void reverse(char* begin, char* end)
{
if ((begin == NULL) || (end == NULL))
return ;
char temp;
while (begin < end)
{
temp = *begin;
*begin = *end;
*end = temp;
++begin;
--end;
}
}
char *reverseSentence(char *pData)
{
if(NULL == pData)
return NULL;
char *begin = pData;
char *end = pData;
while(*end != '\0')
{
end++;
}
end--;
//reverse the overall sentence
reverse(begin, end);
//reverse each word in the reversed sentence
begin = pData;
end = pData;
while(*begin != '\0')
{
if(*begin == ' ')
{
begin++;
end++;
continue;
}
if(*end == ' ' || *end == '\0')
{
end--;
reverse(begin, end);
end++;
begin = end;
}
else
{
end++;
}
}
return pData;
}
int _tmain(int argc, _TCHAR* argv[])
{
char sentence[] = "I am in China today!! I am very happy!!!!";
char *newSentence = NULL;
newSentence = reverseSentence(sentence);
cout << newSentence << endl;
return 0;
}
方法二:(用异或实现反转)
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
void Reverse(char* b, char* e)
{
if ((b == NULL) || (e == NULL))
return ;
while (b < e)
{
*b ^= *e;
*e ^= *b;
*b ^= *e;
++b;
--e;
}
}
void WordReverse(char* s)
{
if (s == NULL)
return;
Reverse(s, s + strlen(s) - 1);
char* b = s;
char* e = s;
while(*e)
{
if (*e == ' ')
{
Reverse(b, e - 1);
++e;
b = e;
}
else
++e;
}
Reverse(b, e - 1);
}
int _tmain(int argc, _TCHAR* argv[])
{
char my[] = "I am a student";
Reverse(my, my + strlen(my) - 1);
cout << my << endl;
char my2[] = "I am a student ";
WordReverse(my2);
cout << my2 << endl;
return 0;
}
附:
1、递归逆置字符串
char *recurReverse(char* s, int left, int right)
{
if(left >= right)
return s;
char c = s[left];
s[left] = s[right];
s[right] = c;
recurReverse(s, left + 1, right - 1);
}
2、普通的字符串逆置,申请新的空间,然后逆序复制过去。
char *commonReverse(char* s)
{
if(NULL == s)
{
return NULL;
}
char *end = s;
while(*end != '\0')
{
end++;
}
end--;
char *newStr = (char*)malloc(sizeof(char) * (strlen(s) + 1));
char *str = newStr;
while(end != s)
{
*newStr = *end;
end--;
newStr++;
}
*newStr = *end;
*(++newStr) = '\0';
return str;
}
分享到:
相关推荐
程序员面试100题程序员面试100题程序员面试100题
程序员面试的100题,程序员面试的题目。
程序员面试经典算法题.通过对经典的有一定难度的算法类题目的分析,培养程序员算法思维.
程序员面试题精选程序员面试题精选程序员面试题程序员面试题精选精选
程序员面试题精选100题,各种精选面试算法题目, 经典算法题目,面试算法题目
程序员面试题精选100题
程序员面试智力、 算法题汇总一.pdf
非常好的面试题,经典数据结构和算法题目。
程序员常见面试题(算法数据结构)程序员常见面试题(算法数据结构)程序员常见面试题(算法数据结构)
程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试...
程序员面试题精选 C++ 算法 微软 google 程序员面试题精选 C++ 算法 微软 google
程序员面试试题程序员面试试题程序员面试试题程序员面试试题程序员面试试题程序员面试试题
程序员面试智力、算法题汇总一.pdf,这是一份不错的文件
程序员面试题精选100题-何海涛 程序员 面试题 算法 数据结构
本书将程序员面试笔试过程中的各类算法类真题一网打尽。在题目的广度上,通过各种渠道,搜集了近3年来几乎所有IT企业面试笔试算法高频题目,所选择题目均为企业招聘使用题目;在题目的深度上,本书由浅入深、庖丁解...
Java程序员面试笔试真题与解析,包含各大IT企业面试笔试的题目
程序员面试智力题,个人总结的,包含很多类型的智力题,面试前必看,懂一些类型面试时如鱼得水。