1. 删除字符串中所有给定的子串(40分)
问题描述:
在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。
要求实现函数:
int delete_sub_str(const char *str, const char *sub_str, char *result_str)
【输入】 str:输入的被操作字符串
sub_str:需要查找并删除的特定子字符串
【输出】result_str:在str字符串中删除所有sub_str子字符串后的结果
【返回】 删除的子字符串的个数
注:
I、 子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。比如:
在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。如果
匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。
II、 输入字符串不会超过100 Bytes,请不用考虑超长字符串的情况。
示例
输入:str ="abcde123abcd123"
sub_str = "123"
输出:result_str= "abcdeabcd"
返回:2
输入:str ="abcde123abcd123"
sub_str = "1234"
输出:result_str= "abcde123abcd123"
返回:0
import java.util.ArrayList;
public class huawei1 {
public static int delete_sub_str(String str, String sub_str, String result_str){
int counts = 0;
boolean e;
char[] s=str.toCharArray();
char[] sub=sub_str.toCharArray();
int i=0,j=0,k=0,m=0,n=0;
for(;i<s.length;){
e=true;
k=i;
for(j=0;j<sub.length;j++){
if(k<s.length && s[k]==sub[j] && e==true ){
k++;
}
else{
e=false;
break;
}
}
//System.out.println(e);
if(e==true){
for(m=i;m<sub.length+i;m++){
s[m]='#';
counts++;
}
i=i+sub.length;
}
else{
i++;
}
// System.out.println(counts);
}
i=0;
while(i<s.length){
if(s[i]!='#'){
result_str=result_str+s[i];
System.out.print(s[i]);
}
// System.out.print(s[i]);
i++;
}
return counts;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str=new String();
String sub_str=new String();
String result_str=new String();
int counts=0;
str="abcde123abcd123";
sub_str="123";
counts=delete_sub_str(str, sub_str, result_str);
}
}
2. 高精度整数加法(60分)
问题描述:
在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,
参与运算的操作数和结果必须在-231~231-1之间。如果需要进行更大范围的十进制整数加法,需要使用特殊
的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。如下:
9876543210 + 1234567890 = ?
让字符串num1="9876543210",字符串 num2="1234567890",结果保存在字符串 result = "11111111100"。
-9876543210 + (-1234567890) = ?
让字符串num1="-9876543210",字符串 num2="-1234567890",结果保存在字符串 result = "-11111111100"。
要求编程实现上述高精度的十进制加法。
要求实现函数:
void add (const char *num1, const char *num2, char *result)
【输入】num1:字符串形式操作数1,如果操作数为负,则num1[0]为符号位'-'
num2:字符串形式操作数2,如果操作数为负,则num2[0]为符号位'-'
【输出】result:保存加法计算结果字符串,如果结果为负,则result[0]为符号位。
注:
I、 当输入为正数时,'+'不会出现在输入字符串中;当输入为负数时,'-'会出现在输入字符串中,且一定在输入字符串最左边位置;
II、 输入字符串所有位均代表有效数字,即不存在由'0'开始的输入字符串,比如"0012","-0012"不会出现;
III、 要求输出字符串所有位均为有效数字,结果为正或0时'+'不出现在输出字符串,结果为负时输出字符串最左边位置为'-'。
示例
输入:num1 ="580"
num2 = "-50"
输出:result ="530"
输入:num1 ="580"
num2 = "-600"
输出:result ="-20"