記在前面
看網上的評論,說這個東東是外包的。我的態度是先試試吧。
一面,在線機試
。。今天卡在一個低級語法錯誤上,導致最後過了40%,真是智障。。
題目是:找出一個字符串中出現次數最多的字符,並輸出該字符以及它出現的次數。
具體分爲大小寫敏感和不敏感兩種情況。大小寫敏感時,就是輸出出現次數最多的字符,及其出現的次數。大小寫不敏感時,要求輸出的字符按照第一次出現的大寫還是小寫輸出。以及它的出現次數。
以下是代碼:
#include<iostream>
#include<string>
using namespace std;
int main() {
string in; //輸入的字符串
string flag1; //判斷標誌 true爲大小寫敏感,false爲大小寫不敏感
cin >> in;
int j = in.length(); //表示字符串的長度
int b[52] = {0}; //記錄,大小寫敏感時。
struct a {
int num;
int flag; //記錄首次出現是大寫還是小寫 0 大寫 1 小寫
};
//定義一個結構體數組 //記錄每個字母出現的次數。不敏感時用這個。
a a1[26]; //直接這樣也可以定義結構體數組
for (int i = 0; i < 26; i++) {
a1[i].num = 0;
a1[i].flag = 0; //初始化
}
cin >> flag1;
if (flag1 == "false") //大小寫不敏感時,大小寫看成一個字母,
{
for (int i = 0; i < j; i++) {
if ((-1 < (int)(in[i]) - 65 )&&((int)(in[i]) - 65 < 26) && (a1[(int)(in[i])- 65].num == 0)) {
a1[(int)(in[i]) - 65].num++;
a1[(int)(in[i]) - 65].flag = 0;
}
else if ((-1 < (int)(in[i]) - 97)&&((int)(in[i]) - 97 < 26) && (a1[(int)(in[i]) - 97].num == 0)) {
a1[(int)(in[i]) - 97].num++;
a1[(int)(in[i]) - 97].flag = 1;
}
else {
if ((-1 < (int)(in[i]) - 65 )&&((int)(in[i]) - 65 < 26)) { a1[(int)(in[i]) - 65].num++; }
else { a1[(int)(in[i]) - 97].num++; }
}
}
int max = 0; int i3 = 0;
for (int i = 0; i < 26; i++) {
if (a1[i].num > max) { max = a1[i].num; i3 = i; }
}
if (a1[i3].flag == 0) {
cout << (char)(i3 + 65) << " " << max;
}
else{
cout << (char)(i3 + 97) << " " << max;
}
}
else { //大小寫敏感
for (int i = 0; i < j; i++) {
if ((-1 < (int)(in[i]) - 65)&&((int)(in[i]) - 65 < 26)) { b[(int)(in[i]) - 65]++; }
else{ b[(int)(in[i]) - 71]++; }
}
int max = 0; int i3 = 0;
for (int i = 0; i < 52; i++) {
if (b[i] > max) { max = b[i]; i3 = i; }
}
if (i3 < 26) { cout << (char)(i3 + 65) << " " << max; }
else{ cout << (char)(i3 + 71) << " " << max; }
}
return 0;
}
今天卡在了一個智障語法問題,埃,可惜。在C++裏面,連續的小於號,大於號是不能使用的。比如1<a<2這樣的判斷是無法使用的。我今天就是卡在這裏,功虧一簣,可惜。下次繼續加油吧。
涼了,又是一週沒回信。下次繼續加油吧。有續集評論裏面聊。