PDA

Показать полную графическую версию : Вопросы начинающего программиста


Страниц : [1] 2

vadimiron
29-09-2004, 20:29
Делаю такую переменную: char text[30]. А значение данной переменной должно состоять из занчений двух переменных и плюс просто текст, то есть значение переменной text как бы собирается из разных частей
Как это правильно записать??
text=var1"lalala"var2 конечно не проходит

P.S.:вопросов будет ещё много :)


Добавлено:

А сам разобрался: надо использовать функцию sprintf()

Админам: плиззз, не удаляйте этот топик
Я буду тут свои вопросы задавать

vadimiron
30-09-2004, 00:17
Нужно подсчитать количество строчек в файле base.txt
я сделал это так

int count()
* * * *{
* * * * * *FILE *base_stream=fopen("base.txt","r");
* * * * * *char line[100];
* * * * * *int i=0;
* * * * * *while(fgets(line,100,base_stream))
* * * * * *{
* * * * * * * *i++;
* * * * * *} * *
* * * * * *fclose(base_stream);
* * * * * *cout<<i; * * * * * *
* * * *}

Всё работает, а может есть какой нибудь другой способ??
Мне это нужно для расширения кругозора :)

Исправлено: vadimiron, 22:42 29-09-2004

hasherfrog
30-09-2004, 10:24
vadimiron
Для текстовых файлов с длинными строками Ваш метод даст ошибку.

vadimiron
30-09-2004, 15:03
hasherfrog
Ну так вопрос как раз звучал:

а может есть какой нибудь другой способ??

:(
А если имеется ввиду число 100, то я просто знаю, что в моём случае строчка не будет длинее ста знаков

ivank
01-10-2004, 00:34
Например, можно найти длину файла через fseek/ftell, считать его целиком и посчитать количество '\n'. Если файл не слишко большой и памяти не слишком мало, как обычно и бывает. Даже в рекомендациях по написанию прикладных NetBSD программ утверждается, что такой метод предпочтительней построчного чтения.

Добавлено:

Это самый простой путь.

Можно читать не весь файл за раз, а кусками в буффер. В принципе, в данном случае ничуть не сложней. Хотя при более продвинутой обработке (какой-нибудь, даже примитивный, парсинг итд) это довольно неудобно.

vadimiron
02-10-2004, 13:04
Мне нужна такая функция, чтобы из строки вида var1***var2***var3***....  все var вытащить, так как сколько этих var там  будет я не знаю, нужно всё загонять в массив
Если кто программировал на PHP, то нужна функция explode

Есть такое решение

#include <string>
void explode (char *line, char *delim)
{
   char *result=NULL;
   result=strtok(line,delim);
   while (result!=NULL)
   {
       cout<<result;
       result=strtok(NULL,delim);
   }
}


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

ivank
02-10-2004, 13:49
vadimiron
Сделай массив std::string'ов.
Или статический массив char array[x][y], если количество строк как и их длинна фиксированы (т.е. не больше x и y-1) и копируй банальным strcpy(array[[i]], result), где i - номер строки. array будет передаваться извне. А результатом будет array и n - количество считанных записей.

А лучше почитай про std::vector/std::list и std::string. С ними всё было бы гораздо проще.


Исправлено: ivank, 13:07 3-10-2004

vadimiron
02-10-2004, 14:08
Всё со стрингом получилось
Вот так:

void explode (char *line, char *delim)
{
   char *result=NULL;
   result=strtok(line,delim);
   string res[10];
   int i=0;
   while (result!=NULL)
   {
       res[i]=result;
       result=strtok(NULL,delim);
       i++;
   }
}


Теперь функция разбивает строку line вида var1***var2***var3*** на отдельные var и эти var записывает в массив res, *** в этом случае являются delim

Добавлено:

Ещё один вопрос:
Мне надо чтобы массив после его генерации в этой функции был доступен и вне даннго блока, то есть я запускаю функцию explode(line,delim); и потом вызываю поочереди все элементы массива res

Добавлено:

А сам понял, надо string res[10]; вне функции декларировать

vadimiron
05-10-2004, 15:45
Как удалить определённую строчку в файле??
Работаю со стрингами и streams с++
Есть массив FILE[size], каждый элемент которого является определённой строчкой файла.
Надо удалить элемент под номером i данного массива и всё оставшееся записать обратно в файл
И i, и size известны
У меня что то это проделать не получается

ivank
06-10-2004, 00:14
for (i = 0; i < size; ++i)
   if (i != to_delete)
       out_file << data[i] << "\n";
i - переменная счётчика цикла. Лучше для других уелей её не применять и выбирать более значащие имена.

А FILE, если не ошибаюсь #define на внутреннию структуру в stdio.h, или просто структура, не уверен. Но главное, что лучше такоей имя не использовать, на всякий пожарный. И вообще, имена большими буквами лучше давать только константам (задефайненым или через enum).

vadimiron
06-10-2004, 03:35
Спасибо ivank, я сделал таким же образом, у меня там просто небольшая ошибка была, поэтому сначало не работало :)

vadimiron
12-10-2004, 17:37
Хочу начать изучение программирования под Винды и встал такой вопрос: как собственно говоря учить :)
Насколько я понял есть API, две компании сделали из него MFC и OWL для своих двух самых распространнёных компиляторов.
Чтобы стать хорошим программистом, ведь не достаточно уметь программировать в какой то из двух сред, надо и API знать??

hasherfrog
13-10-2004, 02:21
vadimiron
Вопрос риторический?
ПС. На самом деле можно быть отличным программистом и при этом ни разу не видеть "окошек отца виндоуза" ;)

vadimiron
20-10-2004, 19:51
Программирую на WinAPI
При компиляции появляются две такие ошибки:
1.   [Linker error] undefined reference to `_Z7WinProcP6HWND__jjl@16'
2.   [Linker error] undefined reference to `GetStockObject@4'

Что это такое и как с ним бороться???
Врней что это такое, я вроде догадываюсь, линкер не может что то подсоединить, но изза чего это происходит???

Среда: DevC++, они вроде компилятор от mingw используют, если я правильно понимаю

Добавлено:

С первым я разобрался, моя ошибка, а со вторым не могу
GetStockObject - такая же функция в WinAPI есть, почему таая ошибка может возникнуть?

hasherfrog
21-10-2004, 09:22
Вы не подключили системную библиотеку при линковке, имхо. Это функция из GDI, афаик. Не могу точно сказать про DevC++, но кажется, Вы включили "Не использовать стандартные (системные?) библиотеки". Либо Вам надо указать явно при компиляции (точнее, линковке) эту библиотеку. Имя библиотеки можно узнать из справочника по API, там внизу страницы для каждой функции пишут имя хидера, имя библиотеки (ну и ещё что-то :))

vadimiron
21-10-2004, 12:10
Да, меня только одно смущает, этот пример я взял из уроков по АПИ, и во всех этих уроках подключается только одна стандартная библиотека <windows.h>, то есть видимо проблема у меня с компилятором
Буду разбираться

vadimiron
21-10-2004, 16:20
Объясните мне, как string связан с namespace std??
Без объявления этого namespace-а у меня string не понимаются

Исправлено: vadimiron, 14:21 21-10-2004

hasherfrog
22-10-2004, 09:47
vadimiron
:cranky: Пфффф. Как насчёт книжку по C++ почитать?

vadimiron
22-10-2004, 14:42
В моей книжке на этом акцент не делается.
А в примере using namespace std стоит, я думал, это относится к библиотеке iostream, которая подключается к данному примеру, я не знал, что объявление этого namespace также для функционирования стринга нужно.
Так всё же, зачем std для стринга нужен??

hasherfrog
Знаете, так можно вообще весь форум закрыть, а на главной странице написать:"Друзья, смотрите в книжках, там всё есть".
Тема же называется: Вопросы начинающего программиста
Я этим занимаюсь не больше месяца, конечно, я что то важное мог пропустить

ivank
23-10-2004, 07:20
Знаете, так можно вообще весь форум закрыть, а на главной странице написать:"Друзья, смотрите в книжках, там всё есть". Я всеми руками за это прогосовал бы...

string объявлен в namespace std. Всё.

Поэтому и надо указываеть этот неймспейс, либо при объявлении переменных как std::что-то, либо перед объявлением как using std::что-то или using namespace std. А вообще, в нормальной книжке, если рассказывается про std::string, должно бы рассказываться и про то, в какой области имён он объявляется, и про то, что такое namespace "вообще".

Исправлено: ivank, 7:22 23-10-2004




© OSzone.net 2001-2012