如何计算字符串中的数字数量和类型,并用空格替换所有字母



我需要使用库字符串函数而不使用它们来解决此任务。

我解决了没有特殊功能:

void without_functions(string str)
{
int* how_many_num = new int[10];
for (int i = 0; i < 10; ++i)
how_many_num[i] = 0;
for (int i = 0; i < str.size(); ++i)
{
if (str[i] >= '0' && str[i] <= '9')
{
++how_many_num[int(str[i]) - 48];
}
}
for (int i = 0; i <= 9; ++i)
{
if (how_many_num[i] != 0)
{
cout << "Digit " << i << " is founded" << how_many_num[i] << " times" << endl;
}
}

for (int i = 0; i < str.size(); ++i)
{
if ((int(str[i]) >= 65 && int(str[i]) <= 90) || (int(str[i]) >= 97 && str[i] <= '122'))
{
str[i] = ' ';
}
}
cout << endl << "New string:  " << str << endl;
}

我无法想出如何用字符串函数(方法(来实现这项任务。

欢迎使用Stackoverflow!

一些用户在使用短语";使用库字符串函数";。我只是假设你指的是标准库函数。

有几种方法可以实现这一点:

  1. std::replace_ifstd::isdigit
  2. 正则表达式替换
  3. 更新的范围替换
  4. 您也可以使用字符串直接replace函数,但我不建议将其用于此类练习

选择你最喜欢的,我建议你学习所有这些:(祝你好运!

without_functions():存在许多问题

  • 它正在泄漏how_many_num。使用它时需要delete[]。最好使用std::vector,但对于这样一个小的阵列,使用动态内存没有意义,只需使用固定阵列而不是

  • 您的cout循环不允许使用0数字。您应该用0..9以外的初始值填充数组元素,然后查找该值而不是0

  • 您的替换循环正在查找'122',而它应该查找122。但是,您确实应该使用字符文字而不是数字ASCII代码。在编码中使用幻数是个坏习惯。

  • 计算数字和替换字母的循环可以组合成一个循环。

现在,试试类似的东西:

void without_functions(string str)
{
int how_many_num[10];
for (int i = 0; i < 10; ++i)
how_many_num[i] = -1;
for (size_t i = 0; i < str.size(); ++i)
{
if (str[i] >= '0' && str[i] <= '9')
{
++how_many_num[str[i] - '0'];
}
else if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))
{
str[i] = ' ';
}
}
for (int i = 0; i < 10; ++i)
{
if (how_many_num[i] != -1)
{
cout << "Digit " << i << " was found " << how_many_num[i] << " times" << endl;
}
}

cout << endl << "New string:" << str << endl;
}

现在,要将其转换为标准库函数,请尝试以下操作:

#include <array>
#include <string>
#include <cctype>
...
void with_functions(string str)
{
array<int, 10> how_many_num;
how_many_num.fill(-1);
for (char &ch : str)
{
if (isdigit(ch))
{
++how_many_num[ch - '0'];
}
else if (isalpha(ch))
{
ch = ' ';
}
}
for (int i = 0; i < 10; ++i)
{
if (how_many_num[i] != -1)
{
cout << "Digit " << i << " is found " << how_many_num[i] << " times" << endl;
}
}

cout << endl << "New string: " << str << endl;
}

或者:

#include <array>
#include <string>
#include <map>
#include <cctype>
...
void with_functions(string str)
{
map<char, int> how_many_num;
for (char &ch : str)
{
if (isdigit(ch))
{
++how_many_num[ch];
}
else if (isalpha(ch))
{
ch = ' ';
}
}
for (const auto &elem : how_many_num)
{
cout << "Digit " << elem.first << " is found " << elem.second << " times" << endl;
}

cout << endl << "New string: " << str << endl;
}

相关内容

  • 没有找到相关文章

最新更新