Заменить все символы на пробелы

324
22 сентября 2017, 20:07

Я считываю строку, состоящую из чисел, разделенных различными символами, как удалить из строки все символы, заменив их на пробелы. (хочу посчитать сумму этих чисел в конечном итоге). Ограничу условия - числа целые, но могут быть отрицательными, примеры входных последовательностей : "1,2,._3" Итог суммы : 6

Answer 1

Если это char* -

for(char * c = s; *c; ++s)
    if (!isdigit(*c)) *c = ' ';

Если это строка string - то, в принципе, так же:

for(size_t i = 0; i < s.length(); ++i)
    if (!isdigit(s[i])) s[i] = ' ';

Update
Ага, раз вопрос не в замене всех символов на пробелы (см. заголовок вопроса), то вот другое решение:

#include <string>
#include <iostream>
#include <iomanip>
#include <sstream>
using namespace std;
string s = "123vbn12g12hj321.nb3jk.123-ftfy21tf-1.3e2bjh";
int main(int argc, const char * argv[])
{
    cout << s << endl;
    istringstream is(s);
    double sum = 0.0;
    for(double x;;)
    {
        is >> x;
        if (!is.fail())
        {
            cout << "get " << x << endl;
            sum += x;
            continue;
        }
        if (is.eof()) break;
        is.clear();
        is.ignore(1);
    }
    cout << sum << endl;
}
Answer 2

https://ideone.com/QDatJA

#include <cstdio>
int main()
{
  char s[256], *p;
  int x;
  int n;
  fgets(s, sizeof s, stdin);
  // add n after check p to allow last iteration when the number is at the end
  for (p=s; sscanf(p, "%*[^-0-9]%n", &(n=0)), sscanf(p+=n, "%d%n", &x, &(n=0)), *p; p+=n)
    if (n)
      printf("%d ", x);
    else
      ++p; // skip '-'
  return 0;
}
READ ALSO
Алгоритм суммы произведений

Алгоритм суммы произведений

Привет! Помогите пожалуйста с создать алгоритм для суммы произведенийДолжен быть цикл в цикле, первый сделал (произведение), а как теперь...

209
Как работает функция getsockname()?

Как работает функция getsockname()?

Я создаю сокет, привязываю его к порту 33005Далее хочу узнать к какому порту привязан сокет, но почему-то sockaddr_in

307
Создание указателя на метод std::vector::at()

Создание указателя на метод std::vector::at()

Требуется создать указатель на функцию at() стандартного вектора, например std::vector

167
Правильный ли алгоритм к заданию? [требует правки]

Правильный ли алгоритм к заданию? [требует правки]

Правильно ли я сделал алгоритм к заданию? (Оно на картинке в углу)

210