1. 程式人生 > >藍橋杯題目:串的簡單處理

藍橋杯題目:串的簡單處理

在實際的開發工作中,對字串的處理是最常見的程式設計任務。

本題目即是要求程式對使用者輸入的串進行處理。具體規則如下:

1.  把每個單詞的首字母變為大寫。

2.  把數字與字母之間用下劃線字元(_)分開,使得更清晰

3.  把單詞中間有多個空格的調整為1個空格。

例如:

使用者輸入:

you and     me what cpp2005program

則程式輸出:

You And Me WhatCpp_2005_program

使用者輸入:

this is  a 99cat

則程式輸出:

This Is A 99_cat

我們假設:使用者輸入的串中只有小寫字母,空格和數字,不含其它的字母或符號。

每個單詞間由1個或多個空格分隔。

假設使用者輸入的串長度不超過200個字元。

方法一:常規方法,把每一種情況都考慮進去

import java.util.Scanner;
import java.util.Vector;

public class SimpleString1 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String string = scanner.nextLine();
		Vector<Character> vector = new Vector<Character>();
		for (int i = 0; i < string.length(); i++) {
			vector.add(string.charAt(i));
		}
		
		int index = 0;
		
		while(index < vector.size()) {
			if(index == 0 && vector.elementAt(index) >= 'a' && vector.elementAt(index) <= 'z') {
				vector.set(index, (char)(vector.elementAt(index) - ('a'-'A')));
			} else if(vector.elementAt(index - 1) == ' ' && vector.elementAt(index) == ' ') {
				vector.remove(index);
				index --;
			} else if(vector.elementAt(index) >= '0' && vector.elementAt(index) <= '9' && vector.elementAt(index - 1) >= 'a' && vector.elementAt(index - 1) <= 'z') {
				vector.add(index, '_');
				index ++;
			} else if(vector.elementAt(index - 1) >= '0' && vector.elementAt(index - 1) <= '9' && vector.elementAt(index) >= 'a' && vector.elementAt(index) <= 'z') {
				vector.add(index, '_');
				index ++;
			} else if(vector.elementAt(index - 1) == ' ' &&  vector.elementAt(index) >= 'a' && vector.elementAt(index) <= 'z') {
				vector.set(index, (char)(vector.elementAt(index) - ('a'-'A')));
			} else if(vector.elementAt(index - 1) >= '0' && vector.elementAt(index - 1) <= '9' && vector.elementAt(index) >= 'A' && vector.elementAt(index) <= 'Z') {
				vector.add(index, '_');
				index ++;
			} else if(vector.elementAt(index) >= '0' && vector.elementAt(index) <= '9' && vector.elementAt(index - 1) >= 'A' && vector.elementAt(index - 1) <= 'Z') {
				vector.add(index, '_');
				index ++;
			}
			index ++;
		}
		
		for (int i = 0; i < vector.size(); i++) {
			System.out.print(vector.elementAt(i));
		}
		System.out.println();
	}
}

方法二:利用正則表示式

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SimpleString2 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String str = scanner.nextLine();
		String str1[] = str.split("[ ]+");
		
		for (int i = 0; i < str1.length; i++) {
			if(str1[i].charAt(0) >= 'a' && str1[i].charAt(0) <= 'z') {
				str1[i] = String.valueOf((char)(str1[i].charAt(0) - ('a'-'A'))) + str1[i].substring(1);
			}
		}
		
		String s = "";
		for (int i = 0; i < str1.length-1; i++) {
			s += str1[i] + " ";
		}
		s += str1[str1.length-1];
		
		Pattern p = Pattern.compile("[0-9]+");
		Matcher m = p.matcher(s);
		String buf = "";
		int index = 0;
		while(m.find()) {
			int start = m.start();
			int end = m.end();
			buf += s.substring(index, start);
			if(s.charAt(start-1) != ' ') {
				buf += "_";
			}
			buf += m.group();
			if(s.charAt(end) != ' ') {
				buf += "_";
			}
			index = end;
		}
		
		if(index < s.length()) {
			buf += s.substring(index);
		}
		
		System.out.println(buf);
	}

}

方法三:利用正則表示式,更加靈活的解法,也是自己努力的方向

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SimpleString3 {
	public static void print(String[] str) {
		for (int i = 0; i < str.length - 1; i++) {
			System.out.print(str[i] + " ");
		}
		System.out.println(str[str.length - 1]);
	}
	
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String s = scan.nextLine();
		String[] str = s.split("[\\s]+");
		for (int i = 0; i < str.length; i++) {
			String up = ("" + str[i].charAt(0)).toUpperCase();
			StringBuffer sb = new StringBuffer(str[i]);
			str[i] = sb.replace(0, 1, up).toString();
			Matcher m = Pattern.compile("[\\d]+").matcher(str[i]);
			while(m.find()) {
				String s1 = new String(m.group());
				String s2 = s1;
				s2 = "_" + s2 + "_";
				str[i] = str[i].replace(s1, s2);
				if(str[i].startsWith("_")) {
					str[i] = str[i].substring(1);
				}
				if(str[i].endsWith("_")) {
					str[i] = str[i].substring(0, str[i].length() - 1);
				}
			}
		}
		
		print(str);
	}
}

相關推薦

藍橋題目簡單處理

在實際的開發工作中,對字串的處理是最常見的程式設計任務。本題目即是要求程式對使用者輸入的串進行處理。具體規則如下:1.  把每個單詞的首字母變為大寫。2.  把數字與字母之間用下劃線字元(_)分開,使得更清晰3.  把單詞中間有多個空格的調整為1個空格。例如:使用者輸入:yo

藍橋】【簡單處理

【題目】 在實際的開發工作中,對字串的處理是最常見的程式設計任務。 本題目即是要求程式對使用者輸入的串進行處理。具體規則如下: 1. 把每個單詞的首字母變為大寫。

藍橋入門生日蠟燭題

生日蠟燭 某君從某年開始每年都舉辦一次生日party,並且每次都要吹熄與年齡相同根數的蠟燭。 現在算起來,他一共吹熄了236根蠟燭。 請問,他從多少歲開始過生日party的? 請填寫他開始過生日party的年齡數。 注意:你提交的應該是一個整數,不要填寫任何多餘的內容或說

藍橋試題四平方和 java(窮舉)

import java.util.Scanner; /* 練習題:四平方和 四平方和定理,又稱為拉格朗日定理:每個正整數都可以表示為至多四個正整數的平方和。如果把 0 包括進去, 就正好可以表示為四個數的平方和。 比如: 5=02+02+12+22 7=12+12+12+22 則對於一個給定的

藍橋試題十六進位制轉10進位制

問題描述   從鍵盤輸入一個不超過8位的正的十六進位制數字符串,將它轉換為正的十進位制數後輸出。   注:十六進位制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。 樣例輸入 FFFF 樣例輸出 65535 import java.util.Sc

兩道藍橋題目

       今天練了兩道藍橋杯的題目,感覺題目也不怎麼難,打算以後每天都做一兩題來練練手。 例題1: 網友年齡某君新認識一網友。 當問及年齡時,他的網友說: “我的年齡是個2位數,我比兒子大27歲,

藍橋訓練八皇后問題

八皇后問題:在8×8格的國際象棋上擺放八個皇后, 使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上, 問有多少種擺法。 思路,八皇后是典型的回溯演算法,方法如下,dfs演算法搜全排列,已行為推進,每選新一行跳轉布林判斷。新行的選取不能和前面已經放好的元素同列或者對角

2018第九屆藍橋題目

標題:第幾天 2000年的1月1日,是那一年的第1天。 那麼,2000年的5月4日,是那一年的第幾天? 注意:需要提交的是一個整數,不要填寫任何多餘內容。 標題:方格計數在二維平面上有無數個1x1的小方格。我們以某個小方格的一個頂點為圓心畫一個半徑為1000的圓。 你能計算出這

藍橋題目 輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。

問題描述   輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。 演算法描述   由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。

藍橋題目[目錄]

藍橋杯官網免費題,堅持每天練習 開始日期:2019-1-5 基礎練習: 題號 題目 關鍵字 完成情況 BASIC-1 閏年判斷 條件判斷

藍橋題目 輸入一個正整數n,輸出n!的值。

問題描述   輸入一個正整數n,輸出n!的值。   其中n!=1*2*3*…*n。 演算法描述   n!可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用一個數組A來表示一個

藍橋練習題機器人(java)

package lanqiaobei; import java.util.HashMap; import java.util.Scanner; /* 蒜頭君收到了一份禮物,是一個最新版的機器人。這個機器人有4種指令: 1. forward x,前進 x 米。 2. back x,先向後轉,然後前

藍橋訓練2的次冪表示(遞迴)

程式碼:ALGO-95 題目名稱:2的次冪表示 關鍵字: 上傳日期:2014-12-29 資源限制:時間限制:1.0s 記憶體限制:512.0MB 問題描述   任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。

藍橋 題目標題: 排它平方數 最新真題

題目標題: 排它平方數 小明正看著 203879 這個數字發呆。 原來,203879 * 203879 = 41566646641 這有什麼神奇呢?仔細觀察,203879 是個6位數,並且它的每個數位上的數字都是不同的,並且它平方後的所有數位上都不出現組成

藍橋題目看Java輸入問題

就我目前有限的藍橋杯做題經驗來看,C/C++和Java的第一個區別就是輸入。Java的輸入相對比較困難,雖然Scanner已經提供了很多便利,能夠接受多種型別的輸入,但是在多行輸入,尤其是包含空格,長度未知的輸入情況下十分痛苦。。。 以今天做到的一個問題

山東省第五屆藍橋 ///標題啤酒和飲料//c/c++組

標題:啤酒和飲料     啤酒每罐2.3元,飲料每罐1.9元。小明買了若干啤酒和飲料,一共花了82.3元。     我們還知道他買的啤酒比飲料的數量少,請你計算他買了幾罐啤酒。     注意:答案是一個整數。請通過瀏覽器提交答案。    不要書寫任何多餘的內容(例如:寫了

山東省第四屆藍橋 ///題目標題: 高斯日記//c/c++組

題目標題: 高斯日記     大數學家高斯有個好習慣:無論如何都要記日記。     他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210     後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提

藍橋訓練2n皇后問題

問題描述: 給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少种放法?n小於等於8。 輸入格式   輸入的第一

藍橋訓練 學霸的迷宮(bfs)

一道普通的bfs+路徑儲存題,做了大半天,很多細節沒注意,除錯了好久,都是因為平時太好高騖遠不肯動手寫的後果,寫下來當作教訓! 問題描述   學霸搶走了大家的作業,班長為了幫同學們找回作業,決定去找學霸決鬥。但學霸為了不要別人打擾,住在一個城堡裡,城堡外面是

藍橋題目_金陵十三釵

問題描述  在電影《金陵十三釵》中有十二個秦淮河的女人要自我犧牲代替十二個女學生去赴日本人的死亡宴會。為了不讓日本人發現,自然需要一番喬裝打扮。但由於天生材質的原因,每個人和每個人之間的相似度是不同的。由於我們這是程式設計題,因此情況就變成了金陵n釵。給出n個女人和n個學生的