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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2012, 19:34   #1
dimidze
 
Регистрация: 10.12.2012
Сообщений: 7
Восклицание дописать программу

Дана строка символов S. Выяснить, имеются ли в строке такие члены последовательности si, si+1, что si – это запятая, а si+1 – тире.

помогите пожалуйста дописать программу,я ее написал она работает мне нужно написать к ней меню и чтоб она состояла из подпрограмм...помогите чем можете!
вот текст программы:

#include <string.h>

#include <iostream>

using namespace std;

int main()
{
setlocale(0,"");
char str[80]; int z=0;

cout<<"введите строку"<<endl;
gets(str);
int len=strlen(str);
for (int i=0; i<len; i++)
{
if (str[i] == ',' && str[i + 1] == '-')
{
z++;
}
}
cout << "В последовательности "<< z <<" комбинации <,->" << endl;

system("pause");
return 0;
}
dimidze вне форума Ответить с цитированием
Старый 10.12.2012, 19:40   #2
dimidze
 
Регистрация: 10.12.2012
Сообщений: 7
По умолчанию

можете пожалуйста обьяснить как к программам правильно создавать меню...пожалуйста,не могу понять...подскажите плизз!
dimidze вне форума Ответить с цитированием
Старый 10.12.2012, 19:58   #3
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Меню создается с помощью цикла и switch. Только я не вижу, каким образом тут можно выделить подпрограммы...
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 11.12.2012, 22:43   #4
dimidze
 
Регистрация: 10.12.2012
Сообщений: 7
По умолчанию

мне надо чтобы эта программа состояла из функций а я не знаю что надо делать(((
dimidze вне форума Ответить с цитированием
Старый 11.12.2012, 22:46   #5
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

main одна из функции и чёткий пример как она выглядит.. немного изменю код
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 11.12.2012, 22:53   #6
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
Подмигивание

Код:
#include <windows.h>

char* rsnuff = NULL;

char* rustext(const char* str)
{
int l = strlen(str);
if(!l) return NULL;
if(rsnuff) delete[] rsnuff;
rsnuff = new char[l + 1];
CharToOem(str, rsnuff);
return rsnuff;
}

int main()
{
setlocale(0,"");
char str[80]; int z=0;

cout<<rustext("введите строку")<<endl;
gets(str);
int len=strlen(str);
for (int i=0; i<len; i++)
{
if (str[i] == ',' && str[i + 1] == '-')
{
z++;
}
}
cout << rustext("В последовательности ")<< z <<rustext(" комбинации <,->") << endl;

system("pause");
return 0;
}
функция rustext возвращает указатель на новую строку с русским текстом. Проанализируй...
В целом язык ты и так вроде бы сделал... но просто как пример...
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 11.12.2012, 22:59   #7
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

меню в консоли?

если я правильно понял... можно как то так...

Код:
char comand[20];
for(;;)
{
std::cin>>comand;
....
куча if/else
....
}
для выхода в цикл впиши

Код:
if(!strcmp(comand, "exit"))
break;
пока не напишешь exit хер выйдешь.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 11.12.2012, 23:06   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
char* rustext(const char* str)
{
    int l = strlen(str);
    if(!l) return NULL;    //<---- принудительное приведение к типу bool. Потеря производительности. В большинстве случаев сигнализирует об ошибках песпечности

    if(rsnuff) delete[] rsnuff;  //<------- глобальная переменная. Потеря над контролем за сложностью проекта.
    rsnuff = new char[l + 1];
    CharToOem(str, rsnuff);  //<------- не нужен вообще. Есть более простые способы
    return rsnuff;
}
итого: rustext - не нужна. К тому же - говнокод.
_Bers вне форума Ответить с цитированием
Старый 11.12.2012, 23:08   #9
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Я сказал, что она не нужно... я лишь показал как выглядят подпрограммы... челу надо. вот и всё... а если говнокод. напиши лучше... я запишу себе в большую тетрадь.

//---------

и да почитай янга char* это указатель его можно инкременировать или ещё как то s == NULL тоже самое что !s
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 11.12.2012 в 23:10. Причина: просто
Perchik71 вне форума Ответить с цитированием
Старый 11.12.2012, 23:43   #10
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
Я сказал, что она не нужно... я лишь показал как выглядят подпрограммы... челу надо. вот и всё... а если говнокод. напиши лучше... я запишу себе в большую тетрадь.

//---------

и да почитай янга char* это указатель его можно инкременировать или ещё как то s == NULL тоже самое что !s
size_t strlen ( const char * str );

результат вычисления этой функции не является значением типа bool, и не является указателем.
Поэтому, его требуется дополнительно привести к типу bool. Потери производительности для оптимизирующего компилятора тут практически копейки.

Однако, он предупреждает о подобных фактах, поскольку в большинстве случаев они являются опечатками программистов, и источниками потенциальных ошибок.



-------------

На уровне пользовательского исходного кода программист работает со стандартными механизмами типа const char*, или std::string, и не парится о кодировках.

Об этом парятся только ОС-зависимые компоненты, которые непосредственно взаимодействуют с ОС.

Например: вот так может выглядить подготовка консоли под виндовс
(тоже говнокод. Зато не жрет ресурсы во время выполнения программы)

Код:
#ifndef TestConsole_h
#define TestConsole_h

//#define WORK_OFF  0 //выключить тестовое оповещение
//#define WORK_ON   1 //включить тестовое оповещение

#ifdef TEST_CONSOLE_ON
    //Режим оповещений тестов в консоли включен. 
    #pragma message("TestConsole: создаю тестовые макросы...")
    #include <iostream>       
    #ifdef _WIN32
       //Если мы работаем в ОС Windows, то будит произведена дополнительная настройка консоли
    
        #pragma message("TestConsole: подготовка консоли WIN32")
        
        //конкретно сейчас нужен для того, что бы компилятор знал
        //о существовании SetConsoleOutputCP(), SetConsoleCP();
        #include "windows.h" 
        
        static void* ConsolePrepare() 
        {
            SetConsoleOutputCP(1251);    SetConsoleCP(1251);      //не удалять! Русский букв!!!
            std::cout.setf(std::ios::fixed,std::ios::floatfield); //увеличивает точность показа дробной части в консоли
            return NULL;
        }
        static const void* const pGlobalTempConsole( ConsolePrepare() ); //всегда будит равна NULL
    #else
        #pragma message("TestConsole: создание макроса происходит не для WIN32...")
        /* нужно как то по другому подготовить консоль*/
    #endif
#else
    #pragma message("TestConsole: Режим тестовых оповещений не установлен")
#endif

#endif  //стражник

Другой пример:
в своём бизнес-приложении ты используешь только стандартные char* и string.

Все проблемы кодировок разруливают ос-зависимые компоненты, и тебе не нужно пасти - юникод у тебя, или мультибайт:

Код:
void CWinDisplay::SetTitle(const std::string& text)const
{ 
    if( MEMBERS.mTitle==text) return;
    MEMBERS.mTitle=text;

    #ifdef UNICODE
        #pragma message("CWinDisplay::SetTitle():  UNICODE")
        wchar_t *buf = new wchar_t[text.length() + 1];
        MultiByteToWideChar(CP_ACP, 0, text.c_str(), -1, buf, text.length() + 1);
        SetConsoleTitle( buf ); 
        delete [] buf;
    #else
        #pragma message("CWinDisplay::SetTitle():  multibyte")
        char *buf = new char[text.length() + 1];
        CharToOem(text.c_str(),buf );
        SetConsoleTitle( buf ); 
        delete [] buf;
    #endif 
}
Вообще сложности с кодировкой возникают только на стыке ввода-вывода. Именно эту область нужно инкапсулировать в отдельных механизмах, которые будут осуществлять преобразование.
Внутри самого бизнес приложения используются только стандартные типы. И никаких макросов типа L"text" и прочей фигни

Последний раз редактировалось _Bers; 11.12.2012 в 23:49.
_Bers вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
дописать программу Александрq Помощь студентам 7 08.11.2012 23:00
Дописать программу на С++ до 23.07 insar Фриланс 6 20.07.2011 10:16
Дописать программу Deshrefresh Помощь студентам 0 04.12.2010 13:31
дописать программу span80 Паскаль, Turbo Pascal, PascalABC.NET 0 20.05.2010 10:15
помогите дописать программу slm Работа с сетью в Delphi 3 09.05.2008 18:39