Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Aliaxandr
7 / 7 / 8
Регистрация: 03.07.2015
Сообщений: 219
1

Пример из книги Джесс Либерти не работает(указатели)

30.09.2015, 04:56. Просмотров 328. Ответов 3
Метки нет (Все метки)

Занимаюсь С++ по книге Джесс Либерти "Освой самостоятельно С++ за 21 день" В С++ новичок. На 8-ом дне, а вернее на 8-ой теме "указатели" меня стопорнул нижеприведенный код. В нем новые элементы, которые раньше не использовались, да и код сам не компилируется и выдает кучу ошибок(несколько раз сравнивал код с листингом 1 в 1). Разница с кодом в книге в том, что я дописываю using namespace std; и в заголовках библиотек не пишу .h. Пишу в консоли Lunux. В примере листинга код должен работать следующим образом:

Enter a string: How it works
Got this word: How
Got this word: it
Got this word: works

т.е. раскладывает введенный текст на строки.
Кроме вопроса, почему код не компилируется вопрос: Что значит амперсанд после типа int в аргументах функции GetWord(), почему не объявлена функция getline(), что это за способ записи cin.getline(buffer,bufferSize);(речь идет о точке между оператором cin и названием функции.

После компиляции выдается следующее:
→ g++ -o pointers pointers.cpp
pointers.cpp:2:16: fatal error: ctype: Nie ma takiego pliku ani katalogu
#include<ctype>
^
compilation terminated.

закоментировал 2-ую строку(#include<ctype>), т.к. при неподключенной библиотеке чаще всего программа работает и просто выдается варнинг. Скомпилировал. Вот результат:
novik@sigma:~/języki_programowania/c++
→ g++ -o pointers pointers.cpp
pointers.cpp: In function ‘int main()’:
pointers.cpp:16:39: error: invalid initialization of reference of type ‘int&’ from expression of type ‘const int’
while(GetWord(buffer, word, bufferSize)){
^
pointers.cpp:6:6: error: in passing argument 3 of ‘bool GetWord(char*, char*, int&)’
bool GetWord(char* string, char* word, int& wordOffset);
^
pointers.cpp: In function ‘bool GetWord(char*, char*, int&)’:
pointers.cpp:29:29: error: ‘strlen’ was not declared in this scope
for(i = 0; i<(int)strlen(p1) && !isalnum(p1[0]); i++)
^
pointers.cpp:40:20: error: ‘strcpy’ was not declared in this scope
strcpy(word,p1,len);
^
pointers.cpp:43:46: error: ‘strlen’ was not declared in this scope
for(i = int(p2-string); i<(int)strlen(string) && !isalnum(p2[0]);i++)
^
anovik@sigma:~/języki_programowania/c++

От куда черти пляшут, вообще не пойму. Либо я на полной затупе, либо может быть какие-либо описки в книге.
Вот сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include<iostream>
#include<ctype>
#include<string>
using namespace std;
 
bool GetWord(char* string, char* word, int& wordOffset);
 
int main(){
        const int bufferSize = 255;
        char buffer[bufferSize+1];
        char word[bufferSize+1];
        int wordOffset = 0;
cout<<"Enter a strih: ";
cin.getline(buffer,bufferSize);
 
while(GetWord(buffer, word, bufferSize)){
        cout<<"Got this word: "<<word<<endl;
}
return 0;
}
bool GetWord(char* string, char* word, int& wordOffset){
        if(!string[wordOffset])
        return false;
 
        char *p1, *p2;
        p1 = p2 = string+wordOffset;
 
        int i;
        for(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);
        strcpy(word,p1,len);
        word[len] = '\0';
 
        for(i = int(p2-string); i<(int)strlen(string) && !isalnum(p2[0]);i++)
                p2++;
 
        wordOffset = int(p2-string);
 
        return true;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2015, 04:56
Ответы с готовыми решениями:

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

Джесс Либерти. Можно изучать?
Решил попробовать начать изучать С++. Нашел старенькую книгу Джесса Либерти...

Указатели на структуры. Программа-пример из книги Шилдта
Здравствуйте. Прошу проверить, правильно ли я поняла значение каждой строчки,...

Не работает пример из книги
Я писал код из книжки и ничего не работает. #include &lt;iostream&gt; using...

Пример из книги не работает.
Пример из книги, тема Классы но смотрю что нет обращения к Task::swap(int...

3
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
30.09.2015, 05:42 2
C++
1
2
for(i = 0; i<(int)strlen(p1) && !isalnum(p1[0]); i++)
    p1++;
Если в учебнике так и было, можете смело использовать его в качестве туалетной бумаги. Эта дичь - не описки в книге, а творчество студента начавшего осваивать C++ 21 день тому назад.
PS:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
using namespace std;
bool GetWord(char*&src, char* word)
{
    while(*src&&!isalnum(*src))
        ++src;
    if(*src)
    {
        while(*src&&isalnum(*src))
            *word++=*src++;
        *word=0;
        return true;
    }else
        return false;
}
int main()
{
    char str[256];
    char*pos=str;
    char word[256];
    cin.getline(str,255);
    while(GetWord(pos,word))
        cout<<word<<endl;
    return 0;
}
2
Aliaxandr
7 / 7 / 8
Регистрация: 03.07.2015
Сообщений: 219
30.09.2015, 18:46  [ТС] 3
Renji, что такое isalnum?я так понимаю стандартная какая-нить функция из библиотеки, но что она делает?

Добавлено через 17 минут
Renji, может посоветуешь тогда книгу для начинающих изучать С++, в которой можно быть уверенным. Об этой книге читал отзывы, вроде все хвалили, но как видишь, тоже не без багов.
0
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
30.09.2015, 19:32 4
isalnum проверяет что символ является буквой или цифрой. Поиск по www.cplusplus.com легко снимает подобные вопросы. Хотя, там нужно хотя-бы минимальное знание английского. Но оно в любом случае нужно, так как на русский переведена далеко не вся необходимая в жизни документация.

Из литературы посоветую раздел форума Литература C++.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2015, 19:32

Не работает пример из книги Лафоре
Доброго времени суток! Взялся решать задачу из книги Лафоре, глава 9, упр. 2....

Инициализация переменных - некорректно работает пример из книги
Взял задачку из книги Г.Шилда. Должно показывать 1 3 6 10 15. Но у меня выдает...

Лафорье (13глава) - пример из книги, как он есть - не работает
Есть пример в книге Лафорье, в 13 главе (многофайловые программы), называется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru