题目:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串 "I am a student",则输出 "student.a am I " 。
思路:
首先翻转整个字符串。产生的结果就是“.tneduts a ma i”。
翻转每一个单词。产生结果为“student. a am i”。
代码:
#include<windows.h>
#include<stdio.h>
//逆置
void reverse(char *left, char *right)
{
if (left != 0 || right != 0){
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
}
void reverse_str(char *str,int len)
{
if (str == "" )
return ;
reverse(str,str + len - 1);//整体逆置
while (*str!='\0'){
char *pCur = str;
if ((*str != '\0') || (*str != ' ')){
str++;
}
reverse(pCur, str-1);//单词逆置
}
}
int main()
{
char str[] = "i am a student";
printf(" string=%s\n", str);
reverse_str(str, strlen(str));
printf(" string=%s\n", str);
system("pause");
return 0;
}
OJ代码:
class Solution {
public:
//交换位置
void reverse(string &str,int begin,int end){
while(begin<end){
char tmp=str[begin];
str[begin]=str[end];
str[end] = tmp;
begin++;
end--;
}
}
string ReverseSentence(string str) {
int len=str.length();
//整体翻转
reverse(str,0,len-1);
int i=0;
int begin=0;//定义一个开始位置
int end=0;//定义一个单词的结束位置
while(i<len){
//把前面的空格都去掉
while(i < len && str[i] == ' ')
{
i++;
}
begin=end=i;
while(i<len&&str[i]!=' '){
i++;
end++;
}
//单词翻转
reverse(str,begin,end-1);
}
return str;
}
};