Вопрос по С++

Стася

Загадка
Нужно список поделить на два стека: в одном - цифры, в другом - буквы.
Есть ли функция, которая распознаёт цифры (или буквы)?
 

Пух

كنت بلهاء
Модератор
Нужно список поделить на два стека: в одном - цифры, в другом - буквы.
Есть ли функция, которая распознаёт цифры (или буквы)?
вроде какая-то есть, можно сделать без функций. В списке будем хранить все элементы как char.
Код:
char n;//символ с списка
if (n >= '0' && n <= '9')  
/*по ASCII таблице все цифры(буквы тоже) идут подряд.
Если n лежит в этом диапазоне, значит это число. */
 add1(n) // добавляем в 1 стек(там где числа int) 
                 
else 
 add2(n) // иначе добавляем в 2 стек (там где буквы).
Лучше описать 1 стуктуру стек, в которой будет поле char. Описать 2 указателя на вершины стека (для каждого из стеков по 1). Для добавления в стек передавать как параметр указатель на вершину того стека, к которому нужно добавить элемент.
Что бы изменить тип с char на int (для подсчета каких-то значений), используй
Код:
int k;
char n='5';
k=n-'0';  //k имеет тип int и равно 5.
 
Останнє редагування:

xxxFAFNIRxxx

Вечный студент :)
Нужно список поделить на два стека: в одном - цифры, в другом - буквы.
Есть ли функция, которая распознаёт цифры (или буквы)?
#include <ctype.h>

isdigit возвращает ненулевое значение если ch - это цифра ('0'-'9')

isalpha возвращает ненулевое значение если ch - это буква (A-Z или a-z).
 

kaAs^^

Забанен
Как "длинное" число поделить на "длинное" ? Напишите хотя бы алгоритм.
Не хватает 64 бит? Самое банальное представляй числа в виде массива и пиши функцию для деления :)

Ну или собери mpir библиотеку. Исходники: проект, документация всё есть в инете.
 

Cris

Member
как выкрутится с такой ситуации:
есть класс, методы в котором могут делать log-записи
я хочу что бы в класс в конструктор передавалась переменная у которой есть оператор <<, а класс использовал то что ему подсунули для записи этих самых log-записей
причем переменная с оператором << может быть хоть std::cout, std::eek:fstream хоть мой собственный класс.
то есть я хочу что-то такое:
Код:
class A
{
public:
A(Log_system& log):_log(log){};
Log_system& _log;
void test_log()
{
  this->_log<<"Test log system"<<std::endl;
}
};
----------------------
#include <iostream>
int main()
{
   A testA(std::cout);
   testA.test_log();// std::cout<<"Test log system"<<std::endl;
}
кто какие варианты использования шаблонов предложит?(нужно сделать из Log_system некий рабочий шаблон)
и еще
нельзя что бы класс инициировался как A<log_system_type> instanceA(....);
должно быть просто A instanceA(...);
такой вариант НЕ подходит:
Код:
#include <iostream>
using namespace std;
template<class LG> class A
{
public:
	A(LG &log_system):log(log_system){};
	LG &log;
	void test_log()
	{
		this->log<<"Test log system"<<endl;
	}
};
int main()
{
	A<ostream> testA(cout);
	testA.test_log();
	return 0;
}
была мысли еще тип Log-системы написать просто в #define и использовать одинаковый тип для всех экземпляров класса, но хотелось бы больше гибкости

Хотелось бы такого:
Код:
#include <iostream>
using namespace std;
class A
{
public:
	template<class LG> A(LG &log_system):log(log_system){};
	template<class LG> LG &log;
	void test_log()
	{
		this->log<<"Test log system"<<endl;
	}
};
int main()
{
	A testA(cout);
	testA.test_log();
	return 0;
}
но не работает :(
 
Останнє редагування:

dreamer

Member
нельзя что бы класс инициировался как A<log_system_type> instanceA(....);
должно быть просто A instanceA(...);
Если сам класс не должен быть шаблоном, сделай что-то вроде (С++ уже плохо помню, могу ошибаться в синтаксисе):
Код:
abstract class Logger
{
    virtual Logger *operator<<(char*) = 0;
}
template<class T> class LoggerImpl : public Logger
{
    T out;
    Logger *operator<<(char* msg) {
        out << msg;
        return this;
    }
}
получишь и гибкость и шаблоны
 

Cris

Member
Если сам класс не должен быть шаблоном, сделай что-то вроде (С++ уже плохо помню, могу ошибаться в синтаксисе):
Код:
abstract class Logger
{
    virtual Logger *operator<<(char*) = 0;
}
template<class T> class LoggerImpl : public Logger
{
    T out;
    Logger *operator<<(char* msg) {
        out << msg;
        return this;
    }
}
получишь и гибкость и шаблоны
хм.. можно попробовать с wrapper'ом над логгером
 

dengolius

Юзверь
Модератор
Помогите с задачей:

задан масив с размерностью n, сформировать два масива таким образом чтобы в первом имелись елементы данного масива с парным индексом, а во втором с не парным.
 

Cris

Member
Помогите с задачей:

задан масив с размерностью n, сформировать два масива таким образом чтобы в первом имелись елементы данного масива с парным индексом, а во втором с не парным.
Код:
int input[N]=...; //входной массив
int array1[N/2+1],array2[N/2+1];// выходные массивы
for(int i=0;i<N;i++)
{
if(i%2==0) array1[i/2]=input[i];//парный индекс
else array2[i/2]=input[i];//непарные индексы
}
вроде так :)
 
Зверху