Здравствуйте, уважаемые эксперты. 1) Подскажите, как перевести числовую переменную (например, int x) в char (char y[20]). Пробовал писать y=(char)x. Но не помогает. 2) Есть ли в С аналог функции Mid$(S,X,N) из Бейсика (возвращает N символов из строки S, начиная с символа X). Если нет, то как этого можно добиться? (Пробовал, strncpy(&t[0],&S[X-1], N), может можно проще?) 3) Можно ли где-то найти приемы или хитрости работы со строками. А то в С это как-то громоздко и не очень удобно (на взгляд непривычного к этому делу человека).
Здравствуйте, Александр! 1. atoi в С или с помощью stringstream - ов в С++. 2. это один из способов. но учтите, что стрнцпы не ставит в конце 0 3. используйте класс std::string, который решает все вопросы, и преведущий тоже. Ответ отправлен: 13.05.2004, 09:52 Отправитель: vitya Отвечает Sedric
Приветствую Вас, Александр! 1.Если вы в C++, то можно использовать приведение типов с помощью static_cast<тип>(ваша переменная) 2.Если такой вариант работает, то в чем проблема?По-моему и так неплохо, но если вы стремитесь к полной элегантности, то спрячьте это в какую-нибудь функцию. 3.В С работа со строками достаточно удобна и мощна! Ответ отправлен: 13.05.2004, 16:07 Отправитель: Sedric Отвечает CrackLab
Доброе время суток, Александр! 1) Когда ты пишешь char y[20] ты объявляешь массив объектов типа char. Поэтому когда ты переводишь int в char и присваиваешь это, ты должен указать какому объекту из массива ты присваиваешь переведенное значение. Т.е. нужно писать y[0] = (char)x; например, только ты не думай что получится эффект аналогичный IntToStr, если тебе нужно из цифры 1 получить символ "1" то используй printf или так: y[0] = (char)x+48 2) Думаю твой вариант нормальный 3) Хитрости тут не нужны. Тут нужно просто понимать что ты делаешь. Я уверен, что твоя проблема в том, что ты не понимаешь, что ты пишешь. Из первого вопроса видно, что ты не понимаешь что значит char y[20], ты думаешь что понимаешь, но я думаю это не так. Советую просто внимательно и полностью почитать какую-нибудь хорошую книгу по С++ (обязательно включа ООП) Ответ отправлен: 12.05.2004, 19:48 Отправитель: CrackLab Отвечает www
Приветствую Вас, Александр! 1) см. приложение 2) этот способ можно упростить в записи strncpy(t,&S[X-1], N). Но это только для строк. Для произвольного массива можно использовать memcpy. 3) В C это классно,удобно и просто - нужно только разобраться и привыкнуть. См. ф-ции sprintf, sscanf.
Приложение: Ответ отправлен: 12.05.2004, 21:24 Отправитель: www
Вопрос № 1608
Здравствуйте, уважаемые эксперты. Я начал учить С++ (немного знал С но на самом примитивном уровне) и после того, как прочитал о классах, у меня появился вопрос - а чем все-таки класс отличается от структуры? Заранее спасибо за ответ!
Доброе время суток, AleX-X! В структурах хранятся переменные, то есть примитивные типы данных.В С++ структуры тоже имеют конструкторы, но классы полностью реализуют все идеи ООП. 1.Поддерживается инкапсуляция. 2.Классы наследуются 3.Вы можете использовать уже не только переменные, но и функции. 4.Классы могут быть объявлены абстрактными, то есть можно сконструировать интерфейс. Ответ отправлен: 13.05.2004, 16:11 Отправитель: Sedric Отвечает Fess
Приветствую Вас, AleX-X! На самом деле различий не так уж и много. Структура, как и класс, может содержать в себе секции private, protected и public, но по умолчанию все переменные и функции относятся к public, тогда как в классах по умолчанию используется private. Структура, в отличии от классов, не может содержать виртуальных функций. Структура не может быть базовой для класса, также она не может быть производной от класса, обратное утверждение также справедливо, Но разрешено наследование(в том числе и множественное) струры от структуры, и, соответственно, класса от класса. Но не советую тебе организовывать огромную иерархию наследования, основанную только на структурах. А вообще Страуструпа почитать не мешало бы...
Ответ отправлен: 15.05.2004, 18:36 Отправитель: Fess Отвечает vitya
Здравствуйте, AleX-X! Очень много чем. Тут не напишешь. Все же почитайте книжки. Ответ отправлен: 13.05.2004, 09:50 Отправитель: vitya Отвечает CrackLab
Приветствую Вас, AleX-X! По определению Бьерна Страуструпа (создателя С++) структура - это класс, у которого все члены по умолчанию являются открытыми (public). У класса же все члены по умолчанию являются закрытыми (private). Кажется это единственное отличие. Ответ отправлен: 12.05.2004, 22:29 Отправитель: CrackLab
Вопрос № 1609
Здраствуйте! У меня вопрос по указателям в С++..я давно с ними уже мучаюсь! Вот к примеру: CMainFrame *pWnd=new CMainFrame-это пишется в книжке в функции BOOL CFirstApp::InitInstance() Почему нельзя создать не указатель на класс, а просто переменную класса? Если создаётся переменная на класс то программа не работает....но почему? Заранее большое спасибо
Здравствуйте, Антон! Программа не работает потому что во всех других местах уже используется не указатель, а ссылка. А вообще, по-моему, указатели намного удобнее переменных. Это одно из самых сильных и слабых мест C++. Ответ отправлен: 13.05.2004, 16:28 Отправитель: Sedric Отвечает www
Добрый день, Антон! ИМХО Это особенность MFC. А поскольку ты пользуешся ее функцией InitInstance - соблюдай правила. Попробуй поэкспериментировать. Создай локальную переменную CMainFrame Wnd. И внеси соответствующие изменения. У тебя покажется окно и тут же исчезнет. Теперь сделай ту же переменную глобальной. Запусти программу. При выполнении начнется ругань, если ее игнорировать окно всеравно будет создано, но с другими параметрами.
Ответ отправлен: 13.05.2004, 20:12 Отправитель: www Отвечает vitya
Здравствуйте, Антон! Насколько мне известно, конструктор защищен, а оператор new перегружен и поэтому может вызывать конструктор. Ответ отправлен: 13.05.2004, 09:48 Отправитель: vitya Отвечает CrackLab
Здравствуйте, Антон! Я к сожалению не знаю такой класс CMainFrame и не могу сказать точно. Возможно там какая-то специфика своя, которая предполагает что работа будет идти только через указатели. Возможно компилятор просто запрещает создавать объект этого класса напрямую, а требует создавать его используя оператор new. А возможно вам просто необходимо исправить вручную все ошибки, т.е. использовать оператор точка (.) вместо стрелки (->) для доступа к членам класса ну и т.д. Скажите точно какие ошибки пишет компилятор. Ответ отправлен: 13.05.2004, 00:01 Отправитель: CrackLab
Вопрос № 1610
Zdravstvuite. Ne podskazhete, kak mozhno otkryvat' file s uzhe i meush'eisya tam informatziei i dobavlyat' novuu zapis', ne stiraya starye dannye? S uvazheniem, vl.
Здравствуйте, vl! Если вы используете WinAPI, то: HANDLE h=CreateFile("foo.txt",GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING, ILE_ATTRIBUTE_ARCHIVE, NULL,NULL); Просто так вы не усекаете его содержимое до нуля. А сли использовать iostream.h, то для этого есть специальный флаг в конструкторе ifstream(); Ответ отправлен: 13.05.2004, 16:27 Отправитель: Sedric Отвечает CrackLab
Здравствуйте, vl! Для того, чтобы после открытия файла указатель текущей позиции внутри файла устанавливался на конец файла нужно открыть файл с ключом "a" и дальше уже работать как обычно. Т.е. нужно использовать например так: fopen("c:\myfile.txt","at"); Для более точного ответа необходимо знать что вы там делаете и как делаете. Ответ отправлен: 13.05.2004, 14:33 Отправитель: CrackLab Отвечает Fess
Добрый день, vl! Юзай произвольный доступ к файлу из stdio.h из С, или функции fstream.h из стандартной библиотеки ввода/вывода С++, или класс CFile из MFC. Уйма способов, если очень захотеть, как говориться...
Ответ отправлен: 15.05.2004, 18:36 Отправитель: Fess Отвечает chebv
Здравствуйте, vl!
Приложение: Ответ отправлен: 13.05.2004, 14:16 Отправитель: chebv Отвечает www
Приветствую Вас, vl! Poishi v spravke po VC++ opisanie funcii "fopen". FILE *fopen( const char *filename, const char *mode ); mode - "a" ili "a+"
Ответ отправлен: 13.05.2004, 20:12 Отправитель: www Отвечает barsik
Добрый день, vl! FOLE *f; f=fopen("filename","a"); fprintf(f, "New line"); fclose(f);
Ответ отправлен: 14.05.2004, 09:23 Отправитель: barsik Отвечает vitya
Добрый день, vl! 1. Открывате файл в режиме append. Для конкретного API смотрите конкретную документацию. 2. Открываете файл для записи, перематываете указатель на самый конец и просто пишете. Ответ отправлен: 13.05.2004, 15:30 Отправитель: vitya
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.