题目链接
#include < iostream>
#include < string>
using namespace std ;
char changeChar (char & a) { // 小写变大写
if (a >= ' a' && a <= ' z' ) a -= 32 ;
return a;
}
int main () {
int n;
string result, s;
cin >> n;
getchar (); // 吸收一个回车,因为输入n之后,要输入一个回车
while (n--) {
result = " " ;
getline (cin, s);
result += changeChar (s[0 ]);
for (int i = 1 ; i < s.size () - 1 ; i++) { // 单词之间可能有多个空格
if (s[i] == ' ' && s[i + 1 ] != ' ' ) result += changeChar (s[i + 1 ]);
}
cout << result << endl;
}
}
import java .util .*;
public class Main {
public static void main (String [] args ) {
Scanner sc = new Scanner (System .in );
while (sc .hasNextInt ()) {
int n = sc .nextInt ();
sc .nextLine ();
for (int i = 0 ; i < n ; i ++) {
String line = sc .nextLine ().trim ();
char [] arr = line .toCharArray ();
StringBuilder sb = new StringBuilder ();
int j = 0 ;
while (j < arr .length ) {
if (arr [j ] <= 'z' && arr [j ] >= 'a' ) {
arr [j ] = Character .toUpperCase (arr [j ]);
}
sb .append (arr [j ]);
while (j < arr .length && arr [j ] != ' ' ) {
j ++;
}
while (j < arr .length && arr [j ] == ' ' ) {
j ++;
}
}
System .out .println (sb .toString ());
}
}
}
}
import java .util .Scanner ;
public class Main {
public static void main (String [] args ) {
Scanner in = new Scanner (System .in );
int n =in .nextInt ();
in .nextLine ();
for (int j = 0 ; j < n ; j ++) {
String s =in .nextLine ();
StringBuilder sb =new StringBuilder ();
boolean flag =true ;
for (int i =0 ;i <s .length ();i ++ ){
char c =s .charAt (i );
if (flag ) {
sb .append (c ); //只收集首字母
flag =false ;
}
if (c ==' ' ){
while (i <s .length ()&&s .charAt (i )==' ' ){
i ++;
}
i --;//和for循环一起就多加了一次
flag =true ; //表示空格读完,接下来可以收集首字母了
}
}
System .out .println (sb .toString ().toUpperCase ());
}
}
}
Java思路3 使用正则表达式去除一个空格或多个空格,然后直接遍历求解
import java .util .Scanner ;
public class Main {
public static void main (String [] args ) {
Scanner in = new Scanner (System .in );
while (in .hasNext ()){
int n = in .nextInt ();
in .nextLine ();
for (int i = 0 ; i < n ; i ++) {
String line = in .nextLine ();
String [] words = line .split ("\\ s+" );
StringBuilder sb = new StringBuilder ();
for (int i1 = 0 ; i1 < words .length ; i1 ++) {
char [] charArray = words [i1 ].toCharArray ();
sb .append (charArray [0 ]);
}
System .out .println (sb .toString ().toUpperCase ());
}
}
in .close ();
}
}
T = int (input ())
for _ in range (T ):
words = input ().split ()
abbr = '' .join (word [0 ].upper () for word in words )
print (abbr )
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main () {
var n int
_ , err := fmt .Scan (& n )
if err != nil {
return
}
scanner := bufio .NewScanner (os .Stdin )
for i := 0 ; i < n && scanner .Scan (); i ++ {
input := scanner .Text ()
words := strings .Fields (input )
var res string
for _ , word := range words {
res += word [:1 ]
}
fmt .Println (strings .ToUpper (res ))
}
}
const rl = require ( "readline" ) . createInterface ( { input :process . stdin } ) ;
const iter = rl [ Symbol . asyncIterator ] ( ) ;
const readline = async ( ) => ( await iter . next ( ) ) . value ;
async function main ( ) {
const n = parseInt ( await readline ( ) ) ;
for ( let i = 0 ; i < n ; i ++ ) {
let line = await readline ( ) ;
let words = line . split ( / \s+/ ) ;
words . forEach ( item => { process . stdout . write ( item . toUpperCase ( ) . charAt ( 0 ) ) } ) ;
console . log ( ) ;
}
}
main ( ) ;