23-24C++(47)——字符串应用+大写isupper(a[i])+小写islower(a[i])+大转小tolower(a[i])+小转大toupper(a[i])+数字isdigit函数

【例 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;
}

冒泡算法的进阶版!!!!!!!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拔刀能留住落樱吗、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值