主页
最近更新
怎样将string类数转为int类数
最后更新于 2025-05-01 15:25:40
作者
xptxxsd
分类
个人记录
复制 Markdown
更新文章内容
**编译版本:C++ 20** 如果我们输入一个字符串,怎样提取里面的数呢? 用 $\text{ASCII} $的运用+位值原理。 例题1:输入一个字符串 $S$,里面有数字和小写字母,请计算 $S$ 中每个数字相加的和并输出。 输入样例:```abc382abc``` 输出样例:```13``` 首先定义好答案的变量和字符串 $S$,并输入字符串: ```cpp int ans = 0; string s; cin >> s; ``` 然后我们就来提取数字: 怎样判断第 $S_i$ 个字符是数字呢?很简单。只要它的 $\text{ASCII} $ 码值在 $30$~$39$ 之间,也就是 '$0$'~'$9$' 之间就是数字,那怎么将它变为数字呢?我们发现,$5$的 $\text{ASCII} $ 码值是$35$,怎么把它的 $\text{ASCII} $ 码值变为$5$呢?很简单,减$30$,$30$在 $\text{ASCII} $ 码的对应字符是$0$,所以只要将第 $S_i$ 个字符减 '$0$',再加到ans中。 完整代码: ```cpp #include <iostream> #include <cstring> using namespace std; int main() { int ans = 0; string s; cin >> s; for (int i = 1; i <= s.length(); i++) if (s[i] >= '0' && s[i] <= '9') ans += s[i] - '0'; cout << ans << endl; return 0; } ``` 例题2:输入一个字符串 $S$,里面有数字和小写字母,并且字符串里只有一个数,请输出这个数$×2$的积。 输入样例:```abc382abc``` 输出样例:```764``` 提取数字我们知道了,但是怎么让它成为数呢? 隆重推荐位值原理。 如果一个数为abc,那么这个数也可以表示为100a+10b+c。 那么,我们是从左往右读取数好,还是从右往左读取数好呢? 答案是从左往右,我们待会儿再讲为什么。 先把框架搭好,然后判断 $S_i$ 是不是数字,判断方法我们讲过了,如果是数字,就将ans $× 10$ $ + ($那个字符数 $-$ '$0$')。 为什么呢?如果你遇到的第一个字符数字是 $3$,那么ans直接加$3$就行。如果你又遇到了一个字符数字 $5$,那么根据我们刚才提到的位值原理,就要给它$× 10+$ 这个字符数字。 那么回到前面的问题:为什么从右往左读取不方便呢? 如果是这样,你肯定要用 pow 函数。(会用到:```pow(10, i)```,意思为$10$的$i$次方。) 那这就很简单了,完整代码: ```cpp #include <iostream> #include <cstring> using namespace std; int main() { string s; int ans = 0; cin >> s; for (int i = 1; i <= s.length(); i++) if (s[i] >= '0' && s[i] <= '9') ans = ans * 10 + (s[i] - '0'); cout << ans * 2; return 0; } ``` 练习:[T370252 S's number](https://www.luogu.com.cn/problem/T370252). 本题也包含题解,见题目背景链接。
Loading...
点赞
0
收藏
0