#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string cleaned(string s1)
{
string cl;
for (int i=0;i<s1.length();++i)
{
if (isdigit(s1[i]))
{
cl[i]=s1[i];
}
}
return cl;
}
int main()
{
string s1="213asd123asd2134";
cout<<cleaned(s1)<<endl;
}
Проблема в том, что в консоли ничего не выводится. (Не уверен что сделал правильно)
У вас нет ничего в cl
- как вы собираетесь писать в i
-й символ? Да даже если бы и было место - то у вас просто были бы разрозненные цифры...
Замените
cl[i]=s1[i];
на
cl +=s1[i];
И, кстати, незачем передавать строку в функцию по значению - достаточно константной ссылки.
P.S. не по делу :) - в связи с вопросами оптимизации в соседнем ответе у меня для VC++2017 лучший результат получился при
string cl;
cl.reserve(s.length());
for(int i = 0, l = s.length(); i < l; ++i)
if (s[i] <= '9' && s[i] >= '0')
cl += s[i];
Кому не лень - можно посмотреть тут.
Я полностью согласен с предыдущим ответчиком, вам нужно cl[i] = s1[i] заменить на cl += s1[i]; однако на мой взгляд
if (isdigit(s1[i]))
{
cl += s1[i];
}
работает медленне, чем следующия реализация:
if (s1[i]-'0'>=0 && s1[i]-'0'<=9)
{
cl+=s1[i];
}
Я говорю это, так как вычитать из символа '0' и получать номер этого символа намного удобнее и много где используется (например для определения заглавная буква или нет). Лучше так, чем искать всякие непонятные команды и специальные функции.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Каким образом можно выровнять по вертикали контент окна с классом WC_LINK? Флаг SS_CENTER не помогает
Нашёл программу выполняющую условие моей задачиНужно организовать ввод самого числа А и ввод числа n