题目描述:
简单的题目一:
通过键盘输入一串小写字母(a--z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
输入pInputStr: 输入字符串lInputLen: 输入字符串长度
输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
解答:
import java.util.Scanner;
public class Tongji2 {
public static void main(String[] args){
System.out.println("请输入你要统计的字符:");
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
String result=condense(str);
System.out.println("最终的结果:"+result);
}
public static String condense(String str) {
char[] c = str.toCharArray();
StringBuilder res = new StringBuilder();
int count = 1;// 记录重复的次数
char c1;
int length = c.length;
for(int i = 0; i < length; i++) {
c1 = c[i];
if (i < length - 1) {
if (c[i + 1] == c[i]) {
count++;
if (i != length - 2) {
continue;
}
}
if (count > 1) {
res.append(count).append(c1);
count = 1;//上一次重复字母统计结束,计数器归为初始值
} else {
res.append(c[i]);
}
} else {
if (c[i] != c[i - 1]) {
res.append(c[i]);
}
}
}
return res.toString();
}
}
第二题,
通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
输入:“pppppppp” 输出:“p”
解答:
import java.util.Scanner;
public class Tongji1 {
static void stringFilter(char InputStr[], long len, char OutputStr[]) {
int[] a = new int[26];
int num = 0;
int j = 0;// OutputStr[]计数
for (int i = 0; i < len; i++) {
num = InputStr[i] - 'a';
if (a[num] == 0) {// 没出现过
OutputStr[j] = InputStr[i];
j++;
a[num] = 1;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入你想要查询的字符:");
Scanner sc = new Scanner(System.in);
String str = sc.next();
char[] test = str.toCharArray();
long len = test.length;
char[] res = new char[(int) len];
stringFilter(test, len, res);
int j = res.length;
System.out.println("最终的结果为:");
for (int i = 0; i < j; i++) {
if (res[i] != '\0') {
System.out.print(res[i]);
} else
break;
}
}
}
每天进步一点点,今天你进步了吗? Day Day Up
于无声处听惊雷--------三石
每天进步一点点,今天你进步了吗? Day Day Up
于无声处听惊雷--------三石