4Programmers

Не МЫ такие, Жизнь такая %)
Site Admin
Аватара пользователя
Сообщения: 10082
Зарегистрирован: 26-04-2004

Сообщение KriG » 18-12-2005

[quote=Kent,Dec 17 2005, 01:05 AM]Не помню, че strtok делает, ну скажи, зачем ты ей NULL передаешь?
Вот мой вариант, по проще:
Код: Выделить всё
<!--QuoteEBegin-->int CountOfWords(char*Sent)<!--QuoteEBegin-->{<!--QuoteEBegin-->      int j=0;<!--QuoteEBegin-->      for(int i=0;i++;i<strlen(Sent))<!--QuoteEBegin-->     {<!--QuoteEBegin-->           if (Sent[i]=" ")<!--QuoteEBegin-->          {<!--QuoteEBegin-->                  j++;<!--QuoteEBegin-->                  while(Sent[i]=" ")i++;<!--QuoteEBegin-->           }<!--QuoteEBegin-->      }<!--QuoteEBegin-->      return j;<!--QuoteEBegin-->}<!--QuoteEBegin-->
[/quote]
а если стоит 2 пробела подряд?
твой метод вернет неверное количество слов в предложении

а насчет NULL - вот кусок из MSDN (имхо самая авторитетная дока по С/С++):
Код: Выделить всё
char *strtok(<!--QuoteEBegin-->   char *strToken,<!--QuoteEBegin-->   const char *strDelimit <!--QuoteEBegin-->);

Parameters
strToken
String containing token or tokens.
strDelimit
Set of delimiter characters.

On the first call to strtok, the function skips leading delimiters and returns a pointer to the first token in strToken, terminating the token with a null character. More tokens can be broken out of the remainder of strToken by a series of calls to strtok. Each call to strtok modifies strToken by inserting a null character after the token returned by that call. To read the next token from strToken, call strtok with a NULL value for the strToken argument. The NULL strToken argument causes strtok to search for the next token in the modified strToken. The strDelimit argument can take any value from one call to the next so that the set of delimiters may vary.
Example
Код: Выделить всё
// crt_strtok.c<!--QuoteEBegin-->/* In this program, a loop uses strtok<!--QuoteEBegin--> * to print all the tokens (separated by commas<!--QuoteEBegin--> * or blanks) in the string named "string".<!--QuoteEBegin--> */<!--QuoteEBegin--><!--QuoteEBegin-->#include <string.h><!--QuoteEBegin-->#include <stdio.h><!--QuoteEBegin--><!--QuoteEBegin-->char string[] = "A string\tof ,,tokens\nand some  more tokens";<!--QuoteEBegin-->char seps[]   = " ,\t\n";<!--QuoteEBegin-->char *token;<!--QuoteEBegin--><!--QuoteEBegin-->int main( void )<!--QuoteEBegin-->{<!--QuoteEBegin-->   printf( "Tokens:\n" );<!--QuoteEBegin-->   /* Establish string and get the first token: */<!--QuoteEBegin-->   token = strtok( string, seps );<!--QuoteEBegin-->   while( token != NULL )<!--QuoteEBegin-->   {<!--QuoteEBegin-->      /* While there are tokens in "string" */<!--QuoteEBegin-->      printf( " %s\n", token );<!--QuoteEBegin-->      /* Get next token: */<!--QuoteEBegin-->      token = strtok( NULL, seps );<!--QuoteEBegin-->   }<!--QuoteEBegin-->}

Output
Код: Выделить всё
Tokens:<!--QuoteEBegin--> A<!--QuoteEBegin--> string<!--QuoteEBegin--> of<!--QuoteEBegin--> tokens<!--QuoteEBegin--> and<!--QuoteEBegin--> some<!--QuoteEBegin--> more<!--QuoteEBegin--> tokens



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

хых
с твоими подходами к программированию только на асме писать =)
задача программиста пишущего коммерческий софт как можно бытрее сделать это, воспользовавшись уже готовыми решениями.
Иначе зачем, скажем в C# существуют классы XmtlTextReader и XmlTextWriter, когда можно руками отктыть текстовый файл XML, считать все данные в строковыую переменную, а потом самому сидеть и парсить строку.

Баг Форума
Аватара пользователя
Сообщения: 7981
Зарегистрирован: 24-10-2004

Сообщение Kent » 18-12-2005

[quote=KriG,Dec 18 2005, 03:55 PM]а если стоит 2 пробела подряд?
твой метод вернет неверное количество слов в предложении
[/quote]
Ждал вопроса. :)
В условии задачи не было сказано проверять входные данные на корректность. Можно вообще забыть пробел между словами (ошибка абсолютно равноценная двум пробелам), тогда и твой метод вернет неправильное значение.

[quote=KriG,Dec 18 2005, 03:55 PM]а насчет NULL - вот кусок из MSDN (имхо самая авторитетная дока по С/С++):
хых
[/quote]
К сожалению дома не стояло MSDN

[quote=KriG,Dec 18 2005, 03:55 PM]с твоими подходами к программированию только на асме писать =)
задача программиста пишущего коммерческий софт как можно бытрее сделать это, воспользовавшись уже готовыми решениями.
Иначе зачем, скажем в C# существуют классы XmtlTextReader и XmlTextWriter, когда можно руками отктыть текстовый файл XML, считать все данные в строковыую переменную, а потом самому сидеть и парсить строку.

[/quote]
Ты извини, но в данном случае человек попросил решить ему задачу для зачета, а не написать коммерческий софт. Первое, что должен был спросить программист у заказчика, перед написанием - а зачем заказчику эта программа нужна. Т.е. скорректировать формулировку задачи, вникнуть в предметную область, а уже потом, исходя из этого, выбирать методы реализации. Когда то и на асме нужно пописать ;)

Местный
Сообщения: 823
Зарегистрирован: 18-01-2005

Сообщение Andred » 18-12-2005

Ну так что по диф.уру?

Site Admin
Аватара пользователя
Сообщения: 10082
Зарегистрирован: 26-04-2004

Сообщение KriG » 18-12-2005

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

т.е. ты считаешь что если прога не очень серьезная, то и написать ее можно через жопу?

у нас например даже на лабах препод требует try/catch ставить чтобы отлавливать ошибки в printf =)

Баг Форума
Аватара пользователя
Сообщения: 7981
Зарегистрирован: 24-10-2004

Сообщение Kent » 18-12-2005

[quote=KriG,Dec 18 2005, 08:13 PM]т.е. ты считаешь что если прога не очень серьезная, то и написать ее можно через жопу?

[/quote]
Нет, я считаю, что все проги серьезные и писать их нужно правильно, а не через жопу.

"Написать перевод из Hex в OCT"

и

"Перевести из Hex в OCT"

это две совершенно несвязанные задачи. Вторая решается элементарно, если есть уже написанная первая. Человек попросил решить первую, а ты предложил ему решение второй. Значит ты не удовлетворил требования заказчика. Незачот.

(Свежак)
Сообщения: 95
Зарегистрирован: 24-10-2005

Сообщение OMoH4uK » 12-03-2006

Подниму старый топ :)
Просьба помочь с задачей.

Создать программу, в которой:
- с клавиатуры вводится двумерный массив-матрица (размерность массива произвольная);
- в массиве определяются все седловые точки (седловая точка - это элемент, являющийся одновременно минимальным в строке и максимальным в столбце)
Рекомендации:
- используется цикл for;
- индексацию проводить двумя способами, с использованием как указателей, так и индексов.

Госу Флудер
Сообщения: 2740
Зарегистрирован: 20-04-2004

Сообщение d'green » 12-03-2006

Язык напишы.

Госу Флудер
Сообщения: 2092
Зарегистрирован: 11-10-2005

Сообщение *D0T* » 12-03-2006

С++ =)

(Свежак)
Сообщения: 95
Зарегистрирован: 24-10-2005

Сообщение OMoH4uK » 13-03-2006

Visual Studio C++ ;)

Site Admin
Аватара пользователя
Сообщения: 10082
Зарегистрирован: 26-04-2004

Сообщение KriG » 13-03-2006

мля
не путайте С и С++

Visual Studio C++ - это всего лишь среда разработки, она поддерживает как С так и С++

а С и С++ - можно сказать что 2 разных языка т.к. реализуют разные подходы (процедурный и ООП)

Пред.След.

Вернуться в Наша Life

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1