Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2017, 16:44   #1
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию из одной строки перекопировать в другую только цифры

Здравствуйте!
Подскажите пожалуйста, как не используя класс string С++, а используя только строковый тип, из одной строки перекопировать в другую только цифры?
Т.е организация циклов - это я понимаю легко. Но вот как идентифицируется именно цифра, что она цифра а не другой символ?
Неужели вот такое громоздкое:
if (ch=='0' || ch=='1' || ch=='2' и т.д.)
KAMLS вне форума Ответить с цитированием
Старый 07.05.2017, 16:45   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

http://www.asciitable.com/
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.05.2017, 16:50   #3
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Ну то есть всё равно делать условие показанное выше? Нет такой функции "копировать только цифры"?
KAMLS вне форума Ответить с цитированием
Старый 07.05.2017, 16:58   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Они по-порядку идут, не надо 10 проверок. Достаточно 2.

А готовая функция для проверки является ли символ цифрой есть, да.
http://www.cplusplus.com/reference/cctype/isdigit/
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.05.2017, 17:58   #5
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Спасибо.
KAMLS вне форума Ответить с цитированием
Старый 08.05.2017, 07:34   #6
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Здравствуйте!
Продолжаю решать эту задачу. Я только учусь, и для меня многое не так очевидно как многим корифеям от программирования.
Применить функцию перевода из строкового типа в тип long double пока не удалось.
На данный момент получается какая то фигня при копировании из строки "цифры-символы" в строку "только цифры". Т.е. цифры то исправно копируются без запятых и знака $, но вместе с ними при выводе идет набор букв "М".
Подскажите пожалуйста, в чем ошибка?
Код:
#include<iostream>
#include<conio.h>
#include<cstdlib>
using namespace std;
class money
{
private:
	int a;
	long double summa;
	char str [23];
public:
	money (): summa(0), a(0)
	{}
	void mstold()
	{
		char str1[23];
		cout<<"Введите денежную строку: \n";
		cin.get(str1, 23);
		for(int j=0; j<strlen(str1); j++)
		{
			if(str1[j]=='1' || str1[j]=='2' || str1[j]=='3' || str1[j]=='4' || str1[j]=='5' || str1[j]=='6' || str1[j]=='7' || str1[j]=='8' || str1[j]=='9' || str1[j]=='0')
			{
				str[a]=str1[j];
				a++;
			}
		}
		cout<<"\n"<<str;
	}
};
int main()
{
	setlocale(LC_ALL,"rus");
	long double b=666;
	money m1;
	m1.mstold();
	cout<<"\n"<<b;
	getch();
	return 0;
}
KAMLS вне форума Ответить с цитированием
Старый 08.05.2017, 08:06   #7
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Ошибку нашел, ноль забыл поставить в конце строки)))
str[a]='\0';
KAMLS вне форума Ответить с цитированием
Старый 08.05.2017, 08:52   #8
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Рабочая программа:
Код:
#include<iostream>
#include<conio.h>
#include<cstdlib>
#include<math.h>
#include<iomanip>
using namespace std;
class money
{
private:
	int a;
	long double summa;
	char str [23];
public:
	money (): summa(0), a(0)
	{}
	long double mstold()
	{
		char str1[23];
		cout<<"Введите денежную строку: \n";
		cin.get(str1, 23);
		for(int j=0; j<23; j++)
		{
			if(str1[j]=='1' || str1[j]=='2' || str1[j]=='3' || str1[j]=='4' || str1[j]=='5' || str1[j]=='6' || str1[j]=='7' || str1[j]=='8' || str1[j]=='9' || str1[j]=='0' || str1[j]=='.')
			{
				str[a]=str1[j];
				a++;
			}
		}
		str[a]='\0';
		long double summa=atof(str);
		return summa;	
	}
};
int main()
{
	setlocale(LC_ALL,"rus");
	long double b;
	money m1;
	b=m1.mstold();
	cout<<setiosflags(ios::fixed)
		<<setiosflags(ios::showpoint)
		<<setprecision(2)
		<<b;
	getch();
	return 0;
}
KAMLS вне форума Ответить с цитированием
Старый 08.05.2017, 08:53   #9
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Вопрос, как можно оптимизировать фильтр в цикле? Который пропускает только цифры и точку.
KAMLS вне форума Ответить с цитированием
Старый 08.05.2017, 08:56   #10
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

std::isdigit
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование значений ячеек из одной строки в другую ольгаг Microsoft Office Excel 1 19.12.2016 10:47
умножение одной матрицы на другую (выводить не только ответ, но и ход решения) Delphi или C++ carrie bradshaw Помощь студентам 0 29.04.2014 00:20
Переход с одной строки на другую в DBF сканировании danxiel Помощь студентам 2 04.09.2012 14:15
MS SQL SERVER 2005 копирование таблицы из ОДНОЙ БД В другую или перенести все строки из одной таблицы в другую reihtmonbern БД в Delphi 4 17.07.2012 23:25
Перенос данных из строки одной таблицы БД в другую БД Optigood БД в Delphi 15 12.05.2010 17:07