22
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String[] sp = sc.nextLine().split("[^a-zA-Z]+");
StringBuilder sb = new StringBuilder();
for (int i = sp.length - 1; i >= 0; i--)
sb.append(sp[i] + " ");
System.out.println(sb.toString().trim());
sc.close();
}
}
发表于 2018-09-04 20:25:07
回复(10)
16
/*思路:从前往后扫描字符串,遇到是单词就入vector,最后反向输出即可*/
#include
#include
#include
using namespace std;
int main()
{
string str;
while(getline(cin,str))
{
vectorsvec;
svec.clear();
string temp="";
for(int i=0;i
{
if(str[i]>='a' && str[i]<='z' || str[i]>='A' && str[i]<='Z')
temp+=str[i];
else
{
if(temp.size()>0)
{
svec.push_back(temp);
temp="";
}
}
}
if(temp.size()>0)
svec.push_back(temp);
for(int i=svec.size()-1;i>0;--i)
cout<
cout<
}
return 0;
}
发表于 2016-12-17 22:14:43
回复(6)
15
#include
#include
#include
#include
using namespace std;
void deal(vector&res,string& str, char delim = ' ') {
stringstream ss;
ss << str;
string tmp;
while (ss>>tmp) {
res.push_back(tmp);
}
}
int main() {
string str;
while (getline(cin, str)) {
vector res;
for (int i = 0; i < str.size(); i++)
if (!isalnum(str[i]))
str[i] = ' ';
deal(res, str);
cout << res[res.size() - 1];
for (int i = res.size() - 2; i >= 0; i--)
cout << " " << res[i];
cout << endl;
}
return 0;
}
发表于 2017-03-15 23:08:39
回复(8)
14
python 一行解法,不过有点偷机了。。 print(" ".join(input().replace("*"," ").replace("#"," ").replace("!"," ").replace("$"," ").split()[::-1]))
发表于 2017-09-07 19:07:22
回复(22)
5
// 感觉我的代码效率挺好的啊 结果没排上名.....
import java.util.Scanner;
public class Code15 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
String input = scan.nextLine();
// 第一步统一分隔符把只要不是字母的都换成空格
char[] charArray = input.toCharArray();
for(int i=0;i
if(!isAlphaBelta(charArray[i])){
charArray[i]=' ';
}
}
// 去掉两段的空格
input=String.valueOf(charArray).trim();
String[] split = input.split("\\s+");
StringBuilder sb=new StringBuilder();
int i;
for( i=split.length-1;i>0;i--){
sb.append(split[i]+" ");
}
sb.append(split[i]);
System.out.println(sb.toString());
}
}
public static boolean isAlphaBelta(char c){
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){
return true;
}
return false;
}
}
发表于 2017-04-13 22:37:09
回复(2)
7
#include
#include
#include
using namespace std;
int main(){
string str;
while(getline(cin,str)){
vector array;
string temp;
for(int i=0;i<=str.length();i++){
if(str[i]!=' '&&str[i]!='\0')
temp+=str[i];
else{
array.push_back(temp);
temp.clear();
}
}
for(int i=array.size()-1;i>=0;i--)
cout<
cout<
}
return 0;
}
发表于 2016-08-02 12:31:28
回复(10)
8
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String str=sc.nextLine();
String []strArray=str.split("[^a-zA-Z]+");
for(int i=strArray.length-1;i>=2;i--){
System.out.print(strArray[i]+' ');
}
if(strArray[0].length()==0)//如果字符串数组的第一个元素是空串,那么下标为1的元素就是最后一个要输出的元素,末尾不要再加空格
System.out.println(strArray[1]);
else
System.out.println(strArray[1]+' '+strArray[0]);
}
}
}
编辑于 2016-09-07 13:07:33
回复(16)
3
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
string str;
getline(cin,str);
vector vec;
int begin = 0;
int len = 0;
bool renew_begin = true;
for(int i = 0; i
{
if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
{
len++;
if(renew_begin)
{
begin = i;
renew_begin = false;
}
if(i == str.length()-1)
{
string temp = str.substr(begin,len);
vec.push_back(temp);
break;
}
}
else
{
if(len>=1)
{
string temp = str.substr(begin,len);
vec.push_back(temp);
renew_begin = true;
len = 0;
}
}
}
reverse(vec.begin(), vec.end());
for(auto it = vec.begin(); it != vec.end(); it++)
{
if(it
cout<<*it<<" ";
else
cout<<*it;
}
cout<
return 0;
}
发表于 2019-02-20 12:22:01
回复(2)
3
格式错误:您的程序输出的格式不符合要求(比如空格和换行与要求不一致)
case通过率为90.00%
我想知道,格式错误为什么还会有90%通过率,难道输入不同还会影响到我的输出格式???
#include
#include
using namespace std;
int main() {
char words[10000];
while (cin.getline(words,10000))
{
int len = strlen(words);
char arr[21],k=19;
arr[20] = '\0';
for (int i = len - 1; i >= 0; i--) {
if (words[i] >= 'a'&&words[i] <= 'z' || words[i] >= 'A'&&words[i] <= 'Z') {
arr[k--] = words[i];
}
else{
if (k == 19) continue;
cout << arr + k + 1 << ' ';
k = 19;
}
}
cout << arr + k + 1 << endl;
}
return 0;
}
发表于 2017-08-24 11:57:02
回复(17)
2
python一行解放有好多中写法 import re
while 1:
try:
print(" ".join(" ".join(re.sub(r"[^A-Za-z]", " ", input()).split()).split()[::-1]))
except:
break
发表于 2020-02-27 23:26:57
回复(1)
2
while True:
try:
s=list(raw_input().split())
nn=""
ll=[]
l=[]
for i in range(len(s)):
ls=list(s[i])
#print(ls)
x=len(ls)
mm=[]
for j in range(x):
#print(j)
if ls[j].isalpha():
mm.append(ls[j])
else:
mm.append(" ")
ss="".join(mm)
ss.strip()
l=list(ss.split())
for i in l:
ll.append(i)
ll=ll[::-1]
print(" ".join(ll))
except:
break
发表于 2019-07-12 20:31:15
回复(0)
2
#include
#include
#include
using namespace std;
int main()
{
string inn;
while(getline(cin,inn))
{
string str;
for(char temp:inn)
{
if((temp<='Z'&&temp>='A')||(temp<='z'&&temp>='a'))
str += temp;
else if(str.length()>0&&str.back()!=' ')
str += ' ';
}
// ==================== 注意 =====================
// 末尾可能有空格,要删除,90%的通过率就是这里的问题.
// ===============================================
if(str.back()==' ')
//str.erase(str.end()-1);
str.erase(str.length()-1);
int start = 0;
while(1)
{
int ind = str.find(' ',start);
if(ind>=0)
reverse(str.begin()+start,str.begin()+ind);
else
{
reverse(str.begin()+start,str.end());
break;
}
start = ind+1;
}
reverse(str.begin(),str.end());
if(str.length()==0)
cout<<' '<
else
cout<
}
return 0;
}
发表于 2018-08-15 11:23:02
回复(0)
2
1.正则表达式嘛,注意 \\W 是“非大小写字母和数字”啊,不能用。所以应该是 [a-zA-Z]+ 。
2.直接用模式匹配就好,用不着split切分太麻烦。
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while (cin.hasNextLine()) {
String s = cin.nextLine();
Matcher m = Pattern.compile("[a-zA-Z]+").matcher(s);
List list = new ArrayList<>();
while (m.find()) {
list.add(m.group());
}
for (int i = list.size() - 1; i >= 0; --i) {
System.out.print(list.get(i));
if (i != 0) {
System.out.print(' ');
}
}
System.out.println();
}
}
}
发表于 2017-08-22 11:29:28
回复(0)
2
#include
#include
using namespace std;
char str[10000];
char dic[10000][22];
int main()
{
while(gets(str))
{
int flag = 0;//判断是否是第一个空格
int len = strlen(str), it = 0, Word = 0;//单词个数
for(int i=0;i
{
if((str[i]>='a'&&str[i]<='z') || (str[i]>='A'&&str[i]<='Z'))
{
flag = 1;
dic[Word][it++] = str[i];
}
else
{
if(flag == 1)
{
dic[Word][it] = '\0';
it = 0;
Word++;
flag = 0;
}
}
}
dic[Word][it] = '\0';
for(int i=Word;i>=0;i--)
{
if(dic[i][0]!='\0')//他可能出现句首不是字母的情况
{
cout<
if(i)
cout<<" ";
}
}
cout<
}
return 0;
}
发表于 2017-02-01 00:31:01
回复(2)
2
#include
#include
#include
#include
using namespace std;
int main()
{
string src,str;
vectorres;
getline(cin,src);
stringstream sstream(src);
while(sstream>>str)res.push_back(str);
for(auto it=res.rbegin();it!=res.rend();++it)
if(it==res.rbegin())cout<<*it;
else cout<<' '<<*it;
cout<
return 0;
}
发表于 2016-07-30 17:44:43
回复(0)
1
#include
#include
#include
#include
using namespace std;
void deal(vector& res, string& str, char delim = ' '){
// 对字符串进行切分, 借助 stringstream 完成. 默认分割符是空格.
// stringstream 不光能完成切分, 还能完成字符串和数字之间的转换.
stringstream ss;
ss << str;
string tmp;
while(ss >> tmp){
res.push_back(tmp);
}
}
int main(){
string str;
while(getline(cin, str)){
vector res;
for(int i = 0; i < str.size(); ++i){
// 先对分割符进行处理. 如果发现分割符, 就统一处理成空格.
if(!isalnum(str[i])){
str[i] = ' ';
}
}
// 对字符串进行切分
deal(res, str);
for(int i = res.size() - 1; i >= 0; --i){
i != 0 ? cout << res[i] << " " : cout << res[i] << endl;
}
}
return 0;
}
发表于 2020-09-05 19:32:51
回复(0)
1
while True:
try:
original = list(input())
for index,ch in enumerate(original):
if not ch.isalnum():
original[index] = ' '
sentence = list(''.join(original).split())
for word in sentence[::-1]:
if sentence.index(word) != 0:
print(word,end = ' ')
else:
print(word)
except:
break
py解法,输入转列表解决非法输入,再转字符串输出
#include
#include
#include
#include
using namespace std;
int main()
{
string str;
while (getline(cin, str))
{
vector sentence;
string word = "";
for (auto it = str.begin(); it < str.end(); ++it)
if (isalpha(*it))
{
word += *it;
if (it + 1 == str.end())
sentence.push_back(word);
}
else
if (word.length())
{
sentence.push_back(word);
word = "";
}
for (auto it = sentence.rbegin(); it < sentence.rend(); ++it)
if (it + 1 == sentence.rend())
cout << *it << endl;
else
cout << *it << ' ';
}
} 接受大佬批评,补上c++
编辑于 2020-09-01 17:00:08
回复(2)
1
利用字符串可加性
while True:
try:
s, res = input(), ''
for i in s:
if not i.isalpha():
i = ' '
res += i
print(' '.join(res.split()[::-1]))
except:
break
发表于 2020-08-27 19:22:09
回复(0)
1
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
// 去掉首尾和句子中间多余空行
String line = scanner.nextLine();
char[] charArr = line.toCharArray();
for (int i = 0; i < charArr.length; i++) {
char ch = charArr[i];
if (!Character.isLetter(ch)) {
charArr[i] = ' ';
}
}
String[] wordArr = new String(charArr).trim().replaceAll("\\s", " ").split(" ");
List wordList = new ArrayList<>();
for (int i = wordArr.length - 1; i >= 0; i--) {
wordList.add(wordArr[i]);
}
System.out.println(String.join(" ", wordList));
}
}
}
编辑于 2020-08-09 20:00:43
回复(0)
1
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextLine()){
String content = scanner.nextLine();
int[] step = new int[content.length()];
StringBuilder builder = new StringBuilder("");
for(int i = 0; i < content.length(); i++){
char c = content.charAt(i);
if(Character.isLetter(c)){
builder.append(c);
}else{
if(i == 0 || step[i - 1] == 0){
builder.append(" ");
}
step[i] = 1;
}
}
String[] words = builder.toString().split(" ");
StringBuilder wordBuilder = new StringBuilder("");
for(int i = words.length - 1; i >=0; i--){
wordBuilder.append(words[i]).append(" ");
}
System.out.println(wordBuilder.toString().trim());
}
}
}
发表于 2020-05-07 14:05:26
回复(0)