1.数字的特殊处理方式
案例:小乐乐改数字

思路:
- 输入一个整数n
- 获取n的每一位。%10判断是奇数(1)还是偶数(0)。/10消除这一位。
- 输出转换后的整数。
数字是有权重的,例如:10进制数123

代码示例(整型):
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
//pow(x, y) 库函数,计算x的y次方
int main()
{
int n;
cin >> n;
int i = 0;
int ret = 0;
while(n)
{
//if (n % 10 ) //取出数字的一位,'5'
if(n % 10 % 2) //判断奇数还是偶数
ret += 1 * pow(10, i);
else
ret += 0 * pow(10, i); //0乘任何数都是零,这一段可以注释掉
n /= 10; //去除数字的一位,'5'
i++;
}
cout << ret << endl;
return 0;
}
代码示例(字符串):
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cin >> s;
int i = 0;
//遍历字符串
// 如果是奇数数字字符,就改成1
//如果是偶数数字字符,就改成0
//10101
for (i = 0; i < s.size(); i++)
{
if (s[i] % 2 = 0)
s[i] = '1';
else
s[i] = '0';
}
cout << stoi(s) <<endl;
//如果直接输出s,会出现输入222打印出000的情况
return 0;
}
遍历字符串可以使用迭代器、范围for。但使用范围for的时候只是能够一个一个的去获取里面的字符,无法改变。此处可以用下标来访问 。
结尾输出时,如果直接输出s,那么会导致”22222“打印出”00000“的情况。为了解决这个问题,我们应该把字符串里的字符转化成数字,可以使用stoi() 函数,stoi中’i’是整形int的意思。
从上面内容,我们可以看出:有时用字符串去读更为简单。
2.含空格字符串的特殊处理方式
Tips:
根据我们现在掌握的知识,读取含空格的字符串,有fgets 、scanf 、getchar 、getline 四种方式解决。但有时不一定非要读取这个带空格的字符串,而是将字符串中空格隔开的每一个字符串,当作一个单词处理更方便,也避免了读取带空格字符串的各种问题。
案例:[统计数字字符个数](B2109 统计数字字符个数 - 洛谷)

思路:
- 整个字符串,一次性读取,然后处理字符串,getline
- 逐个单词的方式处理,cin
1.整个字符串
#include <iostream>
#include <string>
using namespace std;
//方法1
int main()
{
string s;
int cnt = 0;
getline(cin, s);
for(char e: s) //数组元素是char类型的,把s里面的字符逐个放到e里面
{
if(isdigit(e)) //使用isdigit()函数
cnt++;
}
cout << cnt << endl;
return 0;
}
2.逐个字符
int main()
{
string s;
int cnt = 0;
while(cin >> s) //读取一个单词,遇到空格停止
{
for (char e: s)
{
if(isdigit(e))
cnt++;
}
}
cout << cnt << endl;
return 0;
}

被折叠的 条评论
为什么被折叠?



