各位大神路过,看到题目如果太简单了,不要扔鸡蛋啦!!!!感觉华为上机题,对字符串操作的不少呀,会正则表达式,绝对有好处呀,当然是对java而言,对C来说,字符串问题还是老老实实转化为字符数组来捣鼓啊!!!!
废话不说了,上菜:
1、StringReverse(char *strIn,char *output)找出 strIn 里面所有大写字母,将其逆序输出
如输入:strIn:"abcHDLmnkKl",输出:output:"KLDH",
Java Code:
public class HuaWeiTest{
static String result;
static String StringReverse(String inputStr){
String outputStr = "";
String tempStr = inputStr.replaceAll("[^A-Z]",""); //将字符串中非大写字母用""替代
for(int i = tempStr.length() - 1; i >= 0; i-- ){ //逆序输出
outputStr += tempStr.charAt(i);
}
return outputStr;
}
/*测试*/
public static void main(String[] args) {
String iStr1 = "a S ADFDfddfFD323s";
System.out.println(iStr1);
System.out.println(StringReverse(iStr1));
}
}
2、 将输入的字符串(字符串仅包含小写字母a到z)按如下规则循环转换后输出:
* a->b,b->c。。。若输入的字符串连续出现两个相同字母,后一个字母连续转换两次 aa转换成bc,zz转换成ab,
* 第三次出现相同的字母按第一个算
* int convert(char *inpuy,char *output)
Java Code:
static String convert(String inputStr){
char[] tempStr = inputStr.toCharArray();
int i = 0;
String outputStr = "";
//先把所有字母都转化,最后来判断z,zz,zzz字母的转化
while(i <= tempStr.length-1){
if(i+1 < tempStr.length){
if(tempStr[i+1] != tempStr[i]){
tempStr[i] = (char)(tempStr[i]+1); //如果tempStr[i]的下一个字母不是它本身,则将其转为后面的字母
i = i+1;
}else{
if(i+2 <= tempStr.length-1){ //如果第tempStr[i]的下一个字母与它相等
if(tempStr[i+2] != tempStr[i]){ //进一步判断第三个字母是否跟tempStr[i]一样,如果不一样
tempStr[i] = (char)(tempStr[i]+1);
tempStr[i+1] = (char)(tempStr[i+1]+2);
i = i+2;
}else{
tempStr[i] = (char)(tempStr[i]+1);
tempStr[i+1] = (char)(tempStr[i+1]+2);
tempStr[i+2] = (char)(tempStr[i]);
i = i+3;
}
}
}
}
if(i+1 == tempStr.length){
tempStr[tempStr.length - 1] += 1; //最后一个字母单独转换;
break;
}
}
//现在来判断是z,zz,zzz转化而来的字母,将其转为a,ab,aba
for(i = 0; i < tempStr.length; i++){
if(tempStr[i] == 'z' + 1){
tempStr[i] = 'a';
}
if(tempStr[i] == 'z' + 2){
tempStr[i] = 'b';
}
outputStr += tempStr[i];
}
return outputStr;
}