在一行上输入若干个字符串,每个字符串长度为
,仅由大小写字母构成,代表一个单词。单词间还夹杂了一定数量的非字母字符(但保证是可见字符),代表分隔符。
除此之外,保证总字符长度不超过
。
在一行上输出一个句子,代表以单词为单位逆序排放的结果。单词间使用单个空格分隔。
Nowcoder Hello
Hello Nowcoder
$bo*y gi!r#l
l r gi y bo
package main import ( "bufio" "fmt" "os" "regexp" "strings" ) func reverse(s []string)string{ for i,j:=0,len(s)-1;i<j;i,j=i+1,j-1{ s[i],s[j] = s[j],s[i] } return strings.Join(s, " ") } func main() { scanner:=bufio.NewScanner(os.Stdin) scanner.Scan() s:=scanner.Text() re,_:=regexp.Compile(`\W`) arr:=re.Split(s,-1) res:=reverse(arr) fmt.Println(res) }用正则很简单
package main import ( "bufio" "fmt" "os" ) func main() { rd := bufio.NewReader(os.Stdin) str, _ := rd.ReadString('\n') var flag bool var start, end int for i := len(str) - 1; i >= 0; i-- { if isValid(str[i]) { if !flag { end = i flag = true } start = i if i == 0 { fmt.Printf("%s ", str[start:end+1]) } } else { if flag { fmt.Printf("%s ", str[start:end+1]) flag = false } } } } func isValid(c byte) bool { return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') }
package main import ( "bufio" "fmt" "os" "strings" "unicode" ) func main() { reader := bufio.NewReader(os.Stdin) a, err := reader.ReadString('\n') a = strings.TrimSpace(a) if err != nil { return } else { for _, v := range a { cur := fmt.Sprintf("%c", v) if !unicode.IsLetter(v) && cur != " " { a = strings.ReplaceAll(a, cur, " ") } else { continue } } res := []string{} aSplit := strings.Split(a, " ") for i := len(aSplit) - 1; i > -1; i-- { res = append(res, aSplit[i]) } fmt.Println(strings.Join(res, " ")) } }
package main import ( "bufio" "fmt" "os" "strings" ) func main() { scanner := bufio.NewScanner(os.Stdin) scanner.Scan() input := scanner.Text() sb := strings.Builder{} for i := 0; i < len(input); i++ { ch := input[i] if ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z' { sb.WriteByte(ch) } else { sb.WriteByte(' ') } } words := strings.Fields(sb.String()) for i := len(words) - 1; i >= 0; i-- { fmt.Printf("%s ", words[i]) } }
package main import ( "bufio" "fmt" "os" "strings" ) func main(){ scanner := bufio.NewScanner(os.Stdin) for scanner.Scan(){ sentence := scanner.Text() // ss := strings.Split(sentence,"") ss := []rune(sentence) for i:=0;i<len(ss); i++{ if ss[i] >= 'a' && ss[i] <= 'z' || ss[i] >= 'A' && ss[i] <= 'Z'{ //fmt.Println(string(ss[i])) continue }else { ss[i] = ' ' } } str := make([]string,0) for _, v := range ss { str = append(str, string(v)) } st := strings.Join(str,"") st1 := strings.Split(st," ") for i:=len(st1);i>0;i--{ fmt.Print(st1[i-1]," ") } } }
package main import ( "bufio" "bytes" "fmt" "os" "strings" ) func isAlphabet(c byte) bool { return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' } func splitSentence(sentence string) []string { i := 0 // 需要先跳过非字母起始的字符,不然下面的循环会多添加一个空字符串 for ; i < len(sentence); i++ { if isAlphabet(sentence[i]) { break } } var result []string var word bytes.Buffer isNewWord := false for ; i < len(sentence); i++ { if isAlphabet(sentence[i]) { if isNewWord { result = append(result, word.String()) word.Reset() isNewWord = false } word.WriteByte(sentence[i]) } else { isNewWord = true } } if !isNewWord { result = append(result, word.String()) } return result } func reverseSentence(sentence string) string { words := splitSentence(sentence) var result []string for i := len(words) - 1; i >= 0; i-- { result = append(result, words[i]) } return strings.Join(result, " ") } func main() { reader := bufio.NewReader(os.Stdin) for { data, _, err := reader.ReadLine() if err != nil { break } fmt.Println(reverseSentence(string(data))) } }
package main import ( "bufio" "fmt" "os" ) func main(){ // 读取终端输入 var scanner = bufio.NewScanner(os.Stdin) scanner.Scan() var str = scanner.Text() // 逆序打印,如果非字母只打印空格 var slice []string var tempStr = "" for i:=0;i<len(str);i++ { if (str[i] >= 97 && str[i] <= 122) || (str[i] >= 65 && str[i] <= 90) { tempStr = tempStr + string(str[i]) if i == len(str) -1 { slice = append(slice, tempStr) } }else { slice = append(slice, tempStr) tempStr = "" } } for i:=len(slice)-1;i>=0;i-- { fmt.Printf("%v ",slice[i]) } }