输入字符串 "I am a student",则输出 "student.a am I " 。

题目:

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串 "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;
    }
};

猜你喜欢

转载自blog.csdn.net/snowyuuu/article/details/82014267