46
import sys
print(" ".join(sys.stdin.readline().strip().split(" ")[::-1]))
编辑于 2018-09-05 10:28:58
回复(8)
23
#include
#include
#include
using namespace std;
int main(){
string s;
stack sstack;
while(cin>>s){
sstack.push(s);
}
while(sstack.size()!=1){
cout<
sstack.pop();
}
cout<
return 0;
}
发表于 2017-08-10 23:12:38
回复(13)
10
import java.util.Scanner;
public class StringUtil {
//句子反转
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()){
String str = in.nextLine();
String arr[] = str.split(" ");
StringBuffer res = new StringBuffer();
for(int i=arr.length-1; i>0; i--){
res.append(arr[i]+" ");
}
res.append(arr[0]);
System.out.println(res.toString());
}
}
}
发表于 2017-09-04 16:04:36
回复(6)
14
#include
#include
#include
using namespace std;
int main() {
string words;
while (getline(cin, words)) {
reverse(words.begin(), words.end());
unsigned i = 0, j = i;
while (i < words.size()) {
while (i < words.size() && words[i] != ' ')
++i;
reverse(words.begin() + j, words.begin() + i);
j = ++i;
}
cout << words << endl;
}
return 0;
}
编辑于 2017-12-23 10:04:48
回复(1)
4
#include
#include
#include
using namespace std;
int main()
{ string s; stack st; while(cin>>s) st.push(s); while(st.size()!=1) { cout<
}
发表于 2018-01-10 00:27:58
回复(0)
4
其实这道题应该再加一个空间复杂度为O(1)的要求 /**
*1.先将整个字符串转成字符数组反转得到 mi xiao hello
*2.遍历这个字符数组,遇到空格或者到了尾部再做局部反转
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
char[] arr = s.toCharArray();
for (int i=0; i
char temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
//System.out.println(new String(arr));
int start = 0, end = 0;
for (int i=0; i
if (arr[i]==' ' || i+1==arr.length) {
if (arr[i]==' ')
end = i-1;
else if (i+1==arr.length)
end = i;
for (int j=start; j
char temp = arr[j];
arr[j] = arr[start+end-j];
arr[start+end-j] = temp;
}
start = i + 1;
}
}
System.out.println(new String(arr));
}
发表于 2017-09-11 16:20:10
回复(2)
4
//首先将输入字符串整体逆序,然后再分别逆序每个单词,单词以空格为边界。
//需要注意的是最后一个单词也要逆序,可以最后单独处理。
#include
#include
using namespace std;
void Reverse(string &str, int start, int end) //字符串整体逆序
{
while (start < end)
{
swap(str[start], str[end]);
start++;
end--;
}
}
int main()
{
string str;
while (getline(cin,str))
{
int len = str.length();
if (len <= 1)
{
cout << str << endl;
continue;
}
Reverse(str,0,len-1); //字符串整体逆序,比如输入"hello xiao mi",逆序后变为"im oaix olleh"
int index = 0; //记录每个单词第一个字母的位置index,初始为0
for (int i = 0; i < len; i++)
{
if (str[i] == ' ') //找到第一个空格
{
Reverse(str, index, i - 1); //将str中index到i-1位置之间的单词逆序,此时im变为mi
index = i + 1; //记录下一个待逆序单词的起始位置
}
}
Reverse(str, index, len-1); //处理最后一个单词
cout << str << endl;
}
}
发表于 2017-09-06 16:38:58
回复(1)
2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
String str = scanner.nextLine();
String[] strs = str.split(" ");
for (int i = strs.length-1; i >= 0; i--) {
System.out.print(strs[i]);
if(i != 0){
System.out.print(" ");
}
}
}
}
}
编辑于 2018-10-22 19:51:21
回复(2)
2
C语言思路:
第1步:先将整个字符串逆置。
第2步:再将单词逆置
整个代码多次用到逆置,故设计成函数
代码如下:
#include
#include
int main()
{
char a[1001];
int i,j;
gets(a);
int l=strlen(a);
void reverse(char *str,size_t len);
void print(char *str,size_t len);
reverse(a,l); //整个字符串逆置
for(i=0,j=i;j
{
if(a[j]==' ')
{
reverse(a+i,j-i);
print(a+i,j-i);
printf(" ");
i=j+1;
}
if(a[j]=='\0')
{
reverse(a+i,j-i);
print(a+i,j-i);
break;
}
}
return 0;
}
/****************逆置函数********************/
void reverse(char *str,size_t len)
{
if(str==NULL||*str=='\0'||len==0||len==1)
return;
char *p1,*p2,t;
p1=str;
p2=str+len-1;
while(p1
{
t=*p1;
*p1=*p2;
*p2=t;
p1++;
p2--;
}
}
/*******************输出函数******************/
void print(char *str,size_t len)
{
int i;
for(i=0;i<=len-1;i++)
{
printf("%c",*str);
str++;
}
}
发表于 2018-02-24 14:32:52
回复(1)
2
#include
#include
#include
using namespace std;
int main()
{
string str1, temp;
vector v1;
getline(cin, str1);
for (int i = 0;i < str1.size();++i)
{
if (str1[i] != ' ')
temp += str1[i];
else
{
if (!temp.empty())
{
v1.push_back(temp);
temp.clear();
}
}
}
if (!temp.empty())
v1.push_back(temp);
int i;
for (i = v1.size() - 1;i > 0;--i)
cout << v1[i] << ' ';
cout << v1[i] << endl;
return 0;
}
发表于 2017-09-26 21:03:09
回复(0)
2
//本例题,用python 和用java都有分隔函数,不过不知道c++有没有。所以用C++代码比较复杂一点
时间复杂度是O(n2),从后面像前面递归,遇见空格先后面输出再遇见空格或到最后一个字母停止(没有这个的话会一直输出到你定义的数组长度末)
最后如果遇见的是第一个字符同上,向后输出,遇见空格或最后一个字母停止
最后希望我们共同坚持,特别是我
#include
#include
#include
#define N 1001
using namespace std;
int main()
{
char a[N];
while(gets(a)){
//cout<
for(int i = strlen(a)-1;i>=0;i--)
{
if(a[i]==' ')
{
for(int j = i+1;j
{
if(a[j]==' ')break;
else cout<
}
cout<
}
else if(i==0){
for(int j = i;;j++)
{
if(a[j]==' ')break;
else cout<