0、重点
0.1 toupper()对于非字母直接原样返回
在使用toupper()函数时,我担心非字母字符导致报错,所以再使用之前还加了是否为字母的判断。
但是,我发现ln在使用该函数时,没有判断是否为字母,这让我好奇如果不是字母会产生怎样的结果。
首先,其实现方法如下:
int tolower(int c)
{
if ((c >= 'A') && (c <= 'Z'))
return c + ('a' - 'A');
return c;
}
//如果为字母,则变为大写字母
//不为字母,则不改变值并返回
int toupper(int c)
{
if ((c >= 'a') && (c <= 'z'))
return c + ('A' - 'a');
return c;
}
也就是,如果是’a’,则返’A’;如果是’+’,则还是返回’+’。
故在下题中,不用判断是否为字母
0.2 cin无法接受空白字符,要使用getline()
同时该题的一个坑:
题目只保证了给出的第二个字符串非空,但是没有说第一个字符串 ,所以输入的时候需要用getline(cin,b)
,用cin>>a>>b;
会导致测试点2不通过
1. c++:用户输入的读取
1、题目
2、代码
题目简单,直接放ln的代码:
#include <iostream>
#include <cctype>
using namespace std;
int main(int argc, char **argv)
{
string bad,should;
getline(cin,bad);
getline(cin,should);
for(int i=0;i<should.length();i++){
if(bad.find(toupper(should[i]))!=string::npos) continue;
if(isupper(should[i]) && bad.find('+')!=string::npos) continue;
cout<<should[i];
}
return 0;
}