对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。
给定一个原字符串A,请返回逆序后的字符串。例,输入"I am a boy!", 输出"boy! a am I"
输入一行字符串str。(1<=strlen(str)<=10000)
返回逆序后的字符串。
It's a dog!
dog! a It's
#include<iostream>
#include<string>
using namespace std;
int main(int argc,const char* argv[])
{
string str;
getline(cin,str);
int num = 0;
const char* ptr = nullptr;
string::reverse_iterator riter = str.rbegin();
for( ; riter < str.rend() ; riter++)
{
if(*riter == ' ')
{
ptr = &(*(riter-1));
for(int i=0 ; i < num ; i++,ptr++)
{
cout<<*ptr;
}
cout<<*riter;
num = -1;
}
if(riter == str.rend()-1)
{
string::iterator iter = str.begin();
for(int i=0 ; i < num+1 ; i++,iter++)
{
cout<<*iter;
}
}
num++;
}
return 0;
}
我好菜啊,用一个指针记录正向输出位置,使用逆向迭代器实现翻转输出。。。还是知道题目只会有一个空格。。就不用了那么麻烦的判断了。。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
String str_input = new Scanner(System.in).nextLine();
String[] str_input_splits = str_input.split(" ");
String str_output = "";
for(int i=(str_input_splits.length-1); i>=0; i--){
if(str_output == ""){
str_output += str_input_splits[i];
}else{
str_output = str_output + " " + str_input_splits[i];
}
}
System.out.println(str_output);
}
} #include<stdio.h>
#include <stdlib.h>
//三步翻转法,第一步分出来每个单词,第二步翻转每个单词,第三步翻转整个句子
void reverseWord(char *start, char *end)
{
char temp;
while(start < end)
{
temp=*start ;
*start = *end;
*end = temp;
*start++;
*end--;
}
}
int main() {
char s[10000] = " ";
char *p=s;
char *q=s;
gets(s);
while(*q != '\0')
{
if(' ' == *q) //单词结尾:q首次遇到空格(此时将单词头地址p,和单词尾地址q-1)
{
reverseWord(p,q-1);
while(' ' == *q ) //单词开头:q跳若干空格后下一单词首字符
{
q++;
}
p=q; //单词头地址赋值给p
}
else
{
q++; //单词内部地址自加
}
}
reverseWord(p,q-1); //将最后一个单词逆序
reverseWord(s,q-1); //将整句话逆序
printf("%s\n", s);
return 0;
} #include<iostream>
#include<string>
#include <sstream>
using namespace std;
int main()
{
string str;
getline(cin,str);
int Memory = str.length()-1;
for (int i= str.length();i>=0;i--)
{
if (str[i] == ' ')
{
if (Memory == str.length()-1)
{
cout << str.substr(i+1,Memory-i);
Memory = i;
}
else
{
cout << str.substr(i,Memory-i+1);//Core!
Memory = i ;
}
}
if ( i == 0)
{
cout << str.substr(i,Memory-i);
}
}
return 0;
} import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args){
String s = new Scanner(System.in).nextLine();
List<String> arr1 = new ArrayList<String>();
Collections.addAll(arr1,s.split(" "));
Collections.reverse(arr1);
String re = String.join(" ",arr1);
System.out.println(re);
}
}