Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Арифметические операции над указателями 
V
    Опции темы
Alexandr507
Дата 6.9.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 19.7.2009

Репутация: -1
Всего: -1



Здравствуйте, продолжаю изучение языка по книге Джесс Либерти "С++ освой самостоятельно", пятое издание.

знаю что такое указатели , ссылки перегрузка, переопределение, виртуальная функция и тд

сейчас  на  главе, "Массивы и связанные списки"
дан код, и как я заметил в этой книге,  некоторым моментам почему то не уделяется внимание.
сама программа  разбивает строку на слова,


пожалуйста разберите программу,  как работает эта  функция  Getword

особенно не понятно  что это такое isalnum и strlen, ну и вообщем, насколько можно подробнее пожалуйста

Код

#include<iostream>
#include<ctype.h>
#include<string.h>

bool GetWord(char* theString, char* word, int& wordOffset);

int main()
{
    const int bufferSize = 255;
    char buffer  [bufferSize+1];
    char word  [bufferSize+1];
    int wordOffset = 0;

    std::cout  <<  "Enter a string: ";
    std::cin.getline  (buffer, bufferSize);


    while (GetWord(buffer, word, wordOffset))
    {
        std::cout<<"Got this word: " << word <<std::endl;
    }

    return 0;
}


bool GetWord(char* theString, char* word, int& wordOffset)
{
    if (theString[wordOffset]==0)
        return false;

    char *p1, *p2;
    p1 = p2 = theString + wordOffset;


    for (int i = 0; i<(int)strlen(p1) && !isalnum(p1[0]); i++)
        p1++;


    if (!isalnum(p1[0]))
        return false;

    p2 = p1;


    while (isalnum(p2[0]))
        p2++;

    int len = int (p2 - p1);

    strncpy(word, p1, len);

    word[len] = '\0';

    for (int j = int (p2 - theString); j < (int) strlen(theString) &&  !isalnum (p2[0]); j++ )
    {
        p2++;
    }

    wordOffset = int (p2 - theString);

    return true;
}



PM MAIL   Вверх
bsa
Дата 6.9.2009, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



PM   Вверх
andrew_121
Дата 6.9.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(Alexandr507 @  6.9.2009,  13:28 Найти цитируемый пост)
знаю что такое указатели , ссылки перегрузка, переопределение, виртуальная функция и тд

сейчас  на  главе, "Массивы и связанные списки"

Ты что, с конца книгу читаешь? Это азы.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 6.9.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Alexandr507, Вот, еще тепленькая smile 

Это сообщение отредактировал(а) andrew_121 - 6.9.2009, 16:27


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Alexandr507
Дата 6.9.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 19.7.2009

Репутация: -1
Всего: -1



я по порядку книгу читаю, говорю же

Цитата
я заметил в этой книге,  некоторым моментам почему то не уделяется внимание.



Это сообщение отредактировал(а) Alexandr507 - 6.9.2009, 14:53
PM MAIL   Вверх
bsa
Дата 6.9.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Alexandr507 @ 6.9.2009,  14:46)
Цитата
я заметил в этой книге,  некоторым моментам почему то не уделяется внимание.

Автор видимо предполагает, что читающий владеет азами поиска.
PM   Вверх
Alexandr507
Дата 8.9.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 19.7.2009

Репутация: -1
Всего: -1



Ну хорошо, поиском воспользовался, но вопрос , 

в строке 36


  for (int i = 0; i<(int)strlen(p1) && !isalnum(p1[0]); i++)

как я понял, цикл выполняется при условии если  i  не превышает  размер слова p1  и..

    функция isalnum  проверяет что введено целое или буквенное значение и возвращает единицу, а  если ввести например какой нибудь знак   

" ; * (!#   ну и в этом роде

то функция возвратит 0

но что то не могу до конца довести  объяснение к 36 строке
PM MAIL   Вверх
andrew_121
Дата 8.9.2009, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(Alexandr507 @  8.9.2009,  20:39 Найти цитируемый пост)
for (int i = 0; i<(int)strlen(p1) && !isalnum(p1[0]); i++)

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

Цитата(Alexandr507 @  8.9.2009,  20:39 Найти цитируемый пост)
но что то не могу до конца довести  объяснение к 36 строке 

Ты уже все обьяснил.

Цитата(Alexandr507 @  8.9.2009,  20:39 Найти цитируемый пост)
как я понял, цикл выполняется при условии если  i  не превышает  размер слова p1  и..

    функция isalnum  проверяет что введено целое или буквенное значение и возвращает единицу, а  если ввести например какой нибудь знак   

" ; * (!#   ну и в этом роде

то функция возвратит 0




--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.