P5015 [NOIP 2018 普及組] 標題統計 - 洛谷
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);string s;getline(cin, s);int sz = s.size();int cnt = 0;for (int i = 0; i < sz; i++){if (isspace(s[i]))continue;elsecnt++;}cout << cnt << endl;return 0;
}
isspace判斷是否是空白字符,即空格和換行
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);string s;getline(cin, s);int cnt = 0;for (auto x : s){if (isspace(x))continue;elsecnt++;}cout << cnt << endl;return 0;
}
方法二:按照單詞讀取
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);string s;int cnt = 0;while (cin >> s){cnt += s.size(); }cout << cnt << endl;return 0;
}
有時候處理?個字符串的時候,也不?定要?次性讀取完整個字符串,如果字符串中有空格的話,其實可以當做多個單詞,?次讀取。
cin >> s 會返回?個流對象的引?,即 cin 本?。在C++中,流對象(如 cin )可以被?作布爾值來檢查流的狀態。如果流的狀態良好(即沒有發?錯誤),流對象的布爾值為 true 。如果發?錯誤(如遇到輸?結束符或類型不匹配),布爾值為 false 。
在 while (cin >> s) 語句中,循環的條件部分檢查 cin 流的狀態。如果流成功讀取到?個值, cin >> s 返回的流對象cin 將被轉換為true ,循環將繼續。如果讀取失敗(例如遇到輸?結束符或?法讀取到?個值), cin >> s 返回的流對象 cin 將被轉換為 false ,循環將停?。
B2112 石頭剪子布 - 洛谷
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;string p1, p2;while (n--){cin >> p1 >> p2;if (p1 == p2)cout << "Tie" << endl;else if (p1 == "Rock" && p2 == "Scissors")cout << "Player1" << endl;else if (p1 == "Scissors" && p2 == "Paper")cout << "Player1" << endl;else if (p1 == "Paper" && p2 == "Rock")cout << "Player1" << endl;elsecout << "Player2" << endl;}return 0;
}
B2115 密碼翻譯 - 洛谷
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);string s;getline(cin, s);for (auto &x : s){if ((x >= 'b' && x <= 'z') || (x >= 'B' && x <= 'Z'))x--;else if (x == 'a')x = 'z';else if (x == 'A')x = 'Z';}cout << s << endl;return 0;
}
P5734 【深基6.例6】文字處理軟件 - 洛谷
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int q = 0;int m = 0;string s;string str;int a, b;cin >> q;cin >> s;while (q--){cin >> m;switch(m){case 1:cin >> str;s += str;cout << s << endl;break;case 2:cin >> a >> b;s = s.substr(a, b);cout << s << endl;break;case 3:cin >> a >> str;s.insert(a, str);cout << s << endl;break;case 4:cin >> str;size_t n = s.find(str);if (n == string::npos)cout << -1 << endl;elsecout << n << endl;break;}}return 0;
}
B2120 單詞的長度 - 洛谷
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);string s;cin >> s;cout << s.size();while (cin >> s){size_t n = s.size();cout << ',' << n;}cout << endl;return 0;
}
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);string s;bool flag = true;while (cin >> s){if (flag){cout << s.size();flag = false;}else{size_t n = s.size();cout << ',' << n; }}cout << endl;return 0;
}
B2122 單詞翻轉 - 洛谷
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);string s;while (cin >> s){int left = 0;int right = s.size() - 1;while (left < right){char tmp = s[left];s[left] = s[right];s[right] = tmp;left++;right--;}cout << s << endl;}return 0;
}
其實在C++的STL中,包含?個算法叫 reverse ,可以完成字符串的逆序(反轉)。需要的頭?件是 <algorithm>
void reverse (BidirectionalIterator first, BidirectionalIterator last);
//first: 指向要反轉范圍的第?個元素的迭代器(也可以是地址)
//last: 指向要反轉范圍的最后?個元素的下?個位置的迭代器(也可以是地址)(翻轉時不包括此元素)。
reverse 會逆序范圍 [first, last)
內的元素
string s = "abcdef";
reverse(s.begin(), s.end());
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{ //反轉字符串 string s("abcdef"); reverse(s.begin(), s.end()); cout << s << endl; //反轉數組 int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int size = sizeof(arr) / sizeof(arr[0]); //對數組中的元素進?反轉 reverse(arr, arr+size); for (auto e : arr) { cout << e << " "; } cout << endl; return 0;
}
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);string s;while (cin >> s){reverse(s.begin(), s.end());cout << s << endl;}return 0;
}
B2124 判斷字符串是否為回文 - 洛谷
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);string s;cin >> s;string s1;s1 = s;reverse(s.begin(), s.end());if (s1 == s)cout << "yes" << endl;elsecout << "no" << endl;return 0;
}
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);string s;cin >> s;int left = 0;int right = s.size() - 1;while (left < right){if (s[left] != s[right]){cout << "no" << endl;break;}left++;right--;}if (left >= right)cout << "yes" << endl;return 0;
}
P1765 手機 - 洛谷
#include <bits/stdc++.h>
using namespace std;int c[26] = {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);string s;getline(cin, s);int cnt = 0;for (auto x : s){if (x == ' ')cnt++;elsecnt += c[x - 'a'];}cout << cnt << endl;return 0;
}
P1957 口算練習題 - 洛谷
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int i = 0;cin >> i;string op;string last;while(i--){string ans;cin >> op;int n1, n2;int r = 0;if (op == "a" || op == "b" || op == "c"){cin >> n1 >> n2;ans += to_string(n1);if (op == "a"){r = n1 + n2;ans += "+";ans += to_string(n2);ans += "=";ans += to_string(r);}else if (op == "b"){r = n1 - n2;ans += "-";ans += to_string(n2);ans += "=";ans += to_string(r);}else{r = n1 * n2;ans += "*";ans += to_string(n2);ans += "=";ans += to_string(r); }last = op;}else{n1 = stoi(op);ans += to_string(n1);cin >> n2;if (last == "a"){r = n1 + n2;ans += "+";ans += to_string(n2);ans += "=";ans += to_string(r);}else if (last == "b"){r = n1 - n2;ans += "-";ans += to_string(n2);ans += "=";ans += to_string(r);}else{r = n1 * n2;ans += "*";ans += to_string(n2);ans += "=";ans += to_string(r); }}cout << ans << endl;cout << ans.size() << endl;}return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main()
{ int n = 0; cin >> n; string op; string num1; string num2; string last; int ret = 0; while (n--) { string ans; cin >> op; if (op == "a" || op == "b" || op == "c") { cin >> num1 >> num2; int n1 = stoi(num1); int n2 = stoi(num2); ans += num1; if (op == "a") ret = n1 + n2, ans += "+"; else if (op == "b") ret = n1 - n2, ans += "-"; else ret = n1 * n2, ans += "*"; last = op; } else { num1 = op; cin >> num2; int n1 = stoi(num1); int n2 = stoi(num2);ans += num1; if (last == "a") ret = n1 + n2, ans += "+"; else if (last == "b") ret = n1 - n2, ans += "-"; else ret = n1 * n2, ans += "*"; } ans += (num2 + "=" + to_string(ret)); cout << ans << endl; cout << ans.size() << endl; } return 0;
}