NO.29十六届蓝桥杯备战|string九道练习|reverse|翻转|回文(C++)
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;
else
cnt++;
}
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;
else
cnt++;
}
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;
else
cout << "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;
else
cout << 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;
else
cout << "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++;
else
cnt += 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;
}