Пдскажите, как из строки вытащить числа? и потом преобразованные (например умноженные на 11) вставить на то же место?
Пока хочу понять, как вытащить из строки числа. Вот начала писать, но что-то не так делаю
#include
#include
#include
#include
#define N 50
using namespace std;
void process_string(string &src){
stringstream ss;
int *arr;
arr = new int[N];
for(int i; i < src().length; i++){
if(isdigit(src[i])){
int result = src[i];
ss << result;
arr = ss.src();
}
}
cout << arr;
delete[] arr;
}
int main()
{
string s = "qwe 12 r 34 uio 12000";
process_string(s);
return 0;
}
Другие языки программирования и технологии
как вытащить из строки числа? с++
void process_string(const string &src1) {
string src = src1; // создаём копию строки, чтоб не портить исходную строку
smatch res;
regex reg("[1-9]\\d+");
while (regex_search(src, res, reg)) {
cout << "prefix='" << res.prefix() << "', str='" << res.str() << "'\n";
src = res.suffix();
}
cout << "src='" << src << "'";
}
int main() {
string s = "qwe 1245 r 34 abc";
process_string(s);
return 0;
}
В цикле поиска regex_search из строки всё время удаляется обработанная часть. Иначе regex_search работать не умеет. Поэтому результирующую строку надо собирать в другой строке. Поскольку всё равно надо создавать новую строку, лучше её вернуть как результат функции:
string process_string(const string &src1)
В моём примере выводится prefix - часть строки до найденного фрагмента, str - найденный фрагмент, и в конце выводится оставшаяся часть строки.
Другой вариант функции regex_search не требует создавать новую строку
void process_string(const string &src) {
smatch res;
regex reg("[1-9]\\d+");
auto it = src.cbegin();
while (regex_search(it, src.cend(), res, reg)) {
cout << "position='" << res.position() << "', str='" << res.str() << "'\n";
it += res.position() + res.length();
}
}
string src = src1; // создаём копию строки, чтоб не портить исходную строку
smatch res;
regex reg("[1-9]\\d+");
while (regex_search(src, res, reg)) {
cout << "prefix='" << res.prefix() << "', str='" << res.str() << "'\n";
src = res.suffix();
}
cout << "src='" << src << "'";
}
int main() {
string s = "qwe 1245 r 34 abc";
process_string(s);
return 0;
}
В цикле поиска regex_search из строки всё время удаляется обработанная часть. Иначе regex_search работать не умеет. Поэтому результирующую строку надо собирать в другой строке. Поскольку всё равно надо создавать новую строку, лучше её вернуть как результат функции:
string process_string(const string &src1)
В моём примере выводится prefix - часть строки до найденного фрагмента, str - найденный фрагмент, и в конце выводится оставшаяся часть строки.
Другой вариант функции regex_search не требует создавать новую строку
void process_string(const string &src) {
smatch res;
regex reg("[1-9]\\d+");
auto it = src.cbegin();
while (regex_search(it, src.cend(), res, reg)) {
cout << "position='" << res.position() << "', str='" << res.str() << "'\n";
it += res.position() + res.length();
}
}
Мохамед Катат
поняла, но этот метод не подойдет, ведь мне надо найти в строке числа, преобразовать их, и потом записать в новом виде. а здесь просто в res.str хранится результат одного и потом все равно удаляется ?
А что именно не так? Ошибка вылетает?
Что ты делаешь не так - это, как минимум:
1) код публикуешь не на pastebin
2) используешь указатели. Надо стараться не использовать их никогда. Если нужен динамический массив - бери vector. Хорошо, хоть параметр в функцию передаешь ссылкой &, а не указателем.
3) задаешь вопрос не на спецфоруме
4) не знаешь, как в принципе следует решать задачу.
Я бы, наверно, предложил сперва поделить строку по пробелу на части (google: C++ split string by space), а далее останется только пройти по всем частям, проверить парсятся ли они в числа, и если да, то добавить в vector. Но и слова тоже добавить в vector, чтобы после редактирования собрать все обратно в строку.
Но у меня не так много опыта в C++ и я сомневаюсь, что это хорошее решение. У меня есть крупный проект, где подобное сделано, но копать лень.
Зайди на спецфорум, покажи свою строку "qwe 12 r 34 uio 12000", сразу уясни что у нее нет конкретного формата (слова и числа произвольны и их порядок тоже) и что ее надо еще и обратно собрать после изменения чисел, и спроси как такое лучше делать, покидав свои\мои варианты.
1) код публикуешь не на pastebin
2) используешь указатели. Надо стараться не использовать их никогда. Если нужен динамический массив - бери vector. Хорошо, хоть параметр в функцию передаешь ссылкой &, а не указателем.
3) задаешь вопрос не на спецфоруме
4) не знаешь, как в принципе следует решать задачу.
Я бы, наверно, предложил сперва поделить строку по пробелу на части (google: C++ split string by space), а далее останется только пройти по всем частям, проверить парсятся ли они в числа, и если да, то добавить в vector. Но и слова тоже добавить в vector, чтобы после редактирования собрать все обратно в строку.
Но у меня не так много опыта в C++ и я сомневаюсь, что это хорошее решение. У меня есть крупный проект, где подобное сделано, но копать лень.
Зайди на спецфорум, покажи свою строку "qwe 12 r 34 uio 12000", сразу уясни что у нее нет конкретного формата (слова и числа произвольны и их порядок тоже) и что ее надо еще и обратно собрать после изменения чисел, и спроси как такое лучше делать, покидав свои\мои варианты.
Похожие вопросы
- Как удалить в строке числа но при етом оставить все буквы, JAVA
- вопрос программистам 1с. Как в 1с из середины текстовой строки вырезать числа?
- Как вычленить из строки два целых числа? C++
- Помогите испрвить код Переписать первые элементы каждой строки матрицы a(n*m), больше некоторого числа C, в массив b .
- Pascal. Дана строка, элементы - числа через пробел. Как отсечь числа, которые содержат '0'?
- Заполнить матрицу из 7 строк и 7 столбцов случайными числами в интервале [10;90]
- как в C++ массив чисел преобразовать в строку
- QBASIC сформировать мосив состоящая С М-строк,и М-столбцов
- ассемблер, проверка длины строки
- Напишите программу для С++, которая заменяет в символьной строке все буквы a на буквы b, буквы A на буквы B ...