python单词倒排_单词倒排

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值