编程面试题:字符串(四)

来源:互联网 发布:传奇dbc数据说明 编辑:程序博客网 时间:2024/06/06 06:46
写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,

然后输出输入字符串中含有该字符的个数。不区分大小写。

我的代码如下:


#include<iostream>
#include<string>
using namespace std;


int main() {
char str[1000];
char sub_str,sub_str2;
int cnt=0;

cin.getline(str, 1000);
cin >> sub_str;
if (sub_str >= 'a'&&sub_str <= 'z')
sub_str2 = sub_str - 32;
if (sub_str >= 'A'&&sub_str <= 'Z')
sub_str2 = sub_str + 32;
for (int i = 0; i < 1000; i++) {
if (str[i] == sub_str || str[i] == sub_str2)
cnt++;
}
cout << cnt;
return 0;

}

总结:

我的代码不是最优的,它有一个漏洞就是只能接收长度在1000以内的字符串,超过了就不行了。

因此我在牛客网上找到了一个很好解决了我的问题的代码,如下:

string input;
char target;
getline(cin, input);
cin >> target;
char target1;
if (target >= 65 && target <= 96)
target1 = target + 32;
if (target >= 97 && target <= 129)
target1 = target - 32;
int count = 0;
for (int i = 0; i<input.length(); ++i) {
if (input[i] == target || input[i] == target1)
count++;
}
cout << count << endl;

我的收获:

1.getline(cin,input)的新用法,之前一直用cin.getline(str,1000)这种形式

2.字符串可以直接转换成字符数组的形式,为此我写了一个测试代码,可以直接运行成功

string input;
//char target;
getline(cin, input);
cout << input[3] << endl;

3,。字符串是不能直接转换成大小写的,要char型才可以。

0 0
原创粉丝点击