字符串通配符
描述: | 问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。 |
知识点: | 字符串 |
题目来源: | 内部整理 |
练习阶段: | 初级 |
运行时间限制: | 10Sec |
内存限制: | 128MByte |
输入: | 先输入一个带有通配符的字符串,再输入一个需要匹配的字符串 |
输出: | 返回匹配的结果,正确输出true,错误输出false |
样例输入: | te?t*.* txt12.xls |
样例输出: | false |
思想很简单,就是逐位相加,保存进位,用作下一次相加
* 分析:
* 1、取得两个字符串的长度
* 2、把两个的长度做比较,并得出较长的长度,及较短的长度
* 3、把长度较短的加数字符串,在左面补0,使之与较长的字符串一样长
* 4、从最高位,一个个数的取出来相加,当然首先得转换为整型
* 5、设置进位,如果两个数相加及加上进位大于等于10,并且这不是最左边一个字符相加,相加结果等于
* (取出1+取出2+进位)-10,并把进位设为1;如果没有大于10,就把进位设为0,如些循环,把
* 相加的结果以字符串的形式结合起来,就得到最后的结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#include <iostream>
#include <string>
using
namespace
std;
string Addition(string one, string two);
int
main()
{
string first, second;
while
(1)
{
cout <<
"Please enter two numbers(enter 0 to quit):\n"
;
cin >> first >> second;
if
(
"0"
==first &&
"0"
==second)
break
;
cout <<
"The result is: "
<< Addition(first, second) << endl;
}
return
0;
}
string Addition(string one, string two)
{
int
j, max;
//分别表示第一,二个字符串的长度
int
flen, slen;
string sum;
flen = one.size();
slen = two.size();
if
(flen >= slen)
max = flen;
else
max = slen;
//将的每一位都设为0
sum.resize(max,
'0'
);
//将的每一位都加上first[j]对应的位
for
(j=0;j<flen;j++)
sum[max-j-1] = sum[max-j-1] + one[flen-j-1] -
'0'
;
//将的每一位都加上second[j]对应的位
for
(j=0;j<slen;j++)
sum[max-j-1] = sum[max-j-1] + two[slen-j-1] -
'0'
;
//如果第j位的数大于9,则将其减10,并向上一位进一
for
(j=max-1;j>=1;j--)
if
(sum[j] >
'9'
)
{
sum[j] -= 10;
sum[j-1]++;
}
if
(sum[0] >
'9'
)
{
sum[0] -= 10;
sum =
"1"
+ sum;
}
return
sum;
}
|