查找字符串中的每个数字与字母并输出

C++ Primer 5th 9.47题

#include <iostream> 
#include <string>
#include <vector>
using namespace std;
void Number(const string &s);
void Zimu(const string &s);


int main()
{
string s = "ab2c3d7R4E6";
Number(s);
Zimu(s);
system("pause");
return 0;
}


void Number(const string &s)
{
vector<char> a;
string numbers = "0123456789";
for (int i = 0; i != s.size();)
{
i = s.find_first_of(numbers, i);
if (i != -1)
{
a.push_back(s[i]);
i++;
}
else
break;
}
cout << "数字有:" << endl;
for (auto it : a)
cout << it << endl;
}


void Zimu(const string &s)
{
vector<char> a;
string numbers = "0123456789";
for (int i = 0; i != s.size();)
{
i = s.find_first_not_of(numbers, i);
if (i != -1)
{
a.push_back(s[i]);
i++;
}
else
break;
}
cout << "字母有:" << endl;
for (auto it : a)
cout << it << endl;
}

这是第一版程序

原先错误的地方有:

1.vector中的元素类型应为char

2.i没有自增1,所以i一直停留在那个元素

由于太过冗长,修改如下:

#include <iostream> 
#include <string>
#include <vector>
using namespace std;
void Number(const string &s);
void Zimu(const string &s);


int main()
{
string s = "ab2c3d7R4E6";
Number(s);
Zimu(s);
system("pause");
return 0;
}


void Number(const string &s)
{
vector<char> a;
string numbers = "0123456789";
for (int i = 0; (i = s.find_first_of(numbers, i)) != -1;i++)
{
a.push_back(s[i]);
}
cout << "数字有:" << endl;
for (auto it : a)
cout << it << endl;
}


void Zimu(const string &s)
{
vector<char> a;
string numbers = "0123456789";
for (int i = 0; (i = s.find_first_not_of(numbers, i)) != -1; i++)
{
a.push_back(s[i]);
}
cout << "字母有:" << endl;
for (auto it : a)
cout << it << endl;
}

不需要考虑s的越界问题,因为在你越界之前,find_first_of函数已经检验完毕,直接退出循环,所以把s.size()判断条件改为直到找不到了为止

还有=比!=的优先级低,所有应该打括号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值