输入一个字符串str1,把其中的连续非数字的字符子串换成一个‘*’,存入字符数组str2 中,所有数字字符也必须依次存入 str2 中。输出str2。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str;
getline(cin, str);
string str2;
int l = str.length();
for (int i = 0; i < l; i++)
{
//先判断是不是数字,是就加入
if (str[i] >= '0' && str[i] <= '9')
{
str2 += str[i];
}
else
{
if (i != l - 1 && (str[i + 1] >= '0' && str[i + 1] <= '9'))
{
str2 += "*";
}
else
continue;
}
}
cout << str2;
return 0;
}
最开始想法如上,这么做的思路是如果遇到5yyyy3这种情况可以匹配上,但是漏情况了
例如一个2gad5asfgdsag的字符串,2gad5跟5yyyy3处理方法一样,但是我这种方法没办法应对最后不为数字的情况,所以样例都没有通过
主要目的是提醒自己记得多考虑情况,有if就有else
if (i != l - 1 && (str[i + 1] >= '0' && str[i + 1] <= '9'))的else有i=l-1这种情况,这意味着str遍历到了最后一个元素,还有一种情况是当前元素的后一个元素不为数字
而我要做的就是避免str最后一个元素不为数字,但我没有判断条件的情况
所以修改为
if (i != l - 1 && (str[i + 1] >= '0' && str[i + 1] <= '9'))
{
str2 += "*";
}
else if (i == l - 1 && (str[i] <'0'|| str[i] > '9'))
str2 += "*";
else
continue;
成功AC