【例 1】一个正整数 n,表示有 n 组案例。每组案例输入一个字符串 a,输出字符串 a 下标 为奇数的字符。每组案例输出完都要换行。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
cin >> n;
while (n--)
{
string a;
cin >> a;
for (int i = 1; i < a.length(); i = i + 2)
{
cout << a[i];
}
cout << endl;
}
return 0;
}
【例 2】输入一个字符串和两个整数 c 和 d,输出字符串下标在 c 到 d 之间的所有字符
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
int c, d;
cin >> a >> c >> d;
for (int i = c; i <= d; i++)
{
cout << a[i];
}
return 0;
}
另一种实现方法:把整个 for 循环删掉,用 substr 函数实现 cout << a.substr(c, d - c + 1);
【例 3】输入一个字符串,输出字符串中 ASCII 码大于 100 的字符。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin >> a;
for (int i = 0; i < a.length(); i++)
{
if (a[i] > 100)
{
cout << a[i];
}
}
return 0;
}
【例 4】输入一个正整数 n,然后输入 n 个字符串,要求把这 n 个字符串保存在一个字符串 数组中,然后从最后一个字符串开始输出,直到输出到第一个字符串为止。每个字符串输出 完都要换行。
说明:
开一个 n 个元素的字符串数组 a,则 a 里每个元素(a[0]、a[1]、...)都是 string 类型 的左值。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
cin >> n;
string* a = new string[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = n - 1; i >= 0; i--)
{
cout << a[i] << endl;
}
delete[]a;
return 0;
}
【例 5】输入一个字符串,输出其中大写字母('A'~'Z')字符的个数。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin >> a;
int cnt = 0;
for (int i = 0; i < a.length(); i++)
{
if (a[i] >= 'A' && a[i] <= 'Z') cnt++;
}
cout << cnt;
return 0;
}
【例 6】输入一个字符串 a,把字符串 a 里所有的大写字符转成对应的小写字符,所有的小 写字符转成对应的大写字符,把数字字符'0'转成'9'、'1'转成'8'、'2'转成'7'、...、'9'转成'0'
大写isupper(a[i])+小写islower(a[i])+大转小tolower(a[i])+小转大toupper(a[i])+数字isdigit函数
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin >> a;
for (int i = 0; i < a.length(); i++)
{
if (a[i] >= 'A' && a[i] <= 'Z') //if (isupper(a[i]))
{
a[i] += 32; //a[i] = tolower(a[i]);
}
else if (a[i] >= 'a' && a[i] <= 'z') //else if (islower(a[i]))
{
a[i] -= 32; //a[i] = toupper(a[i]);
}
else if (a[i] >= '0' && a[i] <= '9') //else if (isdigit(a[i]))
{
a[i] = '0' + '9' - a[i];
}
}
cout << a;
return 0;
}
也可以调用iostream头文件中的函数——
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;cin >> a;
for (int i = 0; i < a.length(); i++)
{
if (isupper(a[i]))a[i] = tolower(a[i]);
else if (islower(a[i]))a[i] = toupper(a[i]);
else if (isdigit(a[i]))a[i] = '0' + '9' - a[i];
}
cout << a;
return 0;
}
【例 7】输入一个字符串 a,把字符串 a 里的数字字符保存在字符串 b 里,然后输出 b。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a, b;
cin >> a;
for (int i = 0; i < a.length(); i++)
{
if (a[i] >= '0' && a[i] <= '9')
{
b = b + a[i];
}
}
cout << b;
return 0;
}
如果应用刚刚的数字函数
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a, b;
cin >> a;
for (int i = 0; i < a.length(); i++)
{
if (isdigit(a[i]))
{
b = b + a[i];
}
}
cout << b;
return 0;
}
运行结果如下——
【例 8】输入一个字符串 c 和两个正整数 a 和 b(a<=b),删除 c 中下标为 a~b 之间的所有字符,然后输出 c。
(保证 a~b 是合法的下标范围)
#include<iostream>
#include<string>
using namespace std;
int main()
{
string c;
int a, b;
cin >> c >> a >> b;
c = c.substr(0, a) + c.substr(b + 1);
cout << c;
return 0;
}
还可以这样——
#include<iostream>
#include<string>
using namespace std;
int main()
{
string c;
int a, b;
cin >> c >> a >> b;
c = c.substr(a,b-a+1);
cout << c;
return 0;
}
运行结果如下——
【例 9】输入一个可能带有空格的字符串 a,把 a 中所有的非空格字符保存到 b 中,输出 b。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a, b;
getline(cin, a); //输入带空格的字符串只能用 getline,不能用 cin
for (int i = 0; i < a.length(); i++)
{
if (a[i] != ' ')
{
b = b + a[i];
}
}
cout << b;
return 0;
}
运行结果如下——
【例 10】输入一个可能带有空格的字符串 a,删除 a 中的前置空格字符,然后输出 a。 说明:前置空格指字符串开头的若干个空格字符,直到出现非空格字符为止。 如果 a=" a b c ",那么在删除前置空格字符后,a="a b c "。
代码如下——
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
getline(cin, a);
int p = 0;
while (a[p] == ' ')
{
p++;
}
a = a.substr(p);
cout << a;
return 0;
}
运行结果如下——
【例 11】输入一个可能带有空格的字符串 a,删除 a 中的后置空格字符,然后输出 a。
说明:后置空格指字符串结尾处的若干个空格字符,直到出现非空格字符为止。 如果 a=" a b c ",那么在删除后置空格字符后,a=" a b c"。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
getline(cin, a);
int p = a.length() - 1;
while (a[p] == ' ')
{
p--;
}
a = a.substr(0, p + 1);
cout << a;
return 0;
}
运行结果如下——
【例 12】输入一个正整数 n,然后输入 n 个字符串,按照字符串的长度从长到短排序;如果长度相等,则按照字符串大小从小到大排序。输出排序后的字符串,每个字符串输出后都要 输出一个空格。要求使用冒泡排序法。
样例输入
4
abc
aaa
ab
aaaa
样例输出
aaaa
aaa
abc
ab
#include<iostream>
#include<string>
using namespace std;
bool isCorrect(string a, string b)
{
if (a.length() > b.length() || a.length() == b.length() && a < b)
{
return true;
}
else
{
return false;
}
}
void bubbleSort(string a[], int n)
{
for (int i = n - 2; i >= 0; i--)
{
for (int j = 0; j <= i; j++)
{//把原先简单的判断封装成 isCorrect 函数,以实现复杂判断逻辑
if (!isCorrect(a[j], a[j + 1])) { swap(a[j], a[j + 1]); }
}
}
}
int main()
{
int n;
cin >> n;
string* a = new string[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
bubbleSort(a, n);
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
return 0;
}