Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
7 / 7 / 1
Регистрация: 14.11.2012
Сообщений: 73
1

Анализ и разбиение символьной строки на слова

19.08.2013, 21:55. Показов 935. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу разобраться, что делает цикл в коде. Пожалуйста, помогите.

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <ctype.h>
#include <string.h>
using namespace std;
 
bool getWord( char* theString, char* word, int& wordOffset );
 
int main( void )
{
    const int buffersize = 255;
    char buffer[ buffersize + 1 ]; //содержит всю строку
    char word[ buffersize + 1 ];  //содержит слово
    int wordOffset = 0;             //начальная позиция
    
        cout << "Enter a string: ";
    cin.getline( buffer, buffersize);
 
    while ( getWord( buffer, word, wordOffset ) )
    {
        cout << "Got this word: " << word << endl;
    }
    cout << " end " << endl;
    return 0;
}
 
//Функция разделения строки на слова
bool getWord( char *theString, char *word, int &wordOffset )
{
    if (theString[wordOffset] == 0) //Проверка конца строки
    {
        return false;
    }
    char *p1, *p2;
    p1 = p2 = theString + wordOffset;//указатель на следующее слово 
        //Убрать предваряющие пробелы
        // до каких пор работает цикл? 
        // что возвращает (int)strlen(p1) и !isalnum(p1[0]) ?
    for ( int i = 0; i < (int)strlen(p1) && !isalnum(p1[0]); ++i ) 
    {
        ++p1;
    }
        
    if (!isalnum(p1[0]))
    {
        return false;
    }
        //Теперь р1 указывает на начало следующего слова.
        //р2 теперь тоже
    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;
}
 
#include <iostream>
 
int main(void)
{
    char buffer[6];
    std::cin.getline( buffer, 5 );
    char *p = buffer;
    std::cout << *p << " " << strlen(p) << std::endl;
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.08.2013, 21:55
Ответы с готовыми решениями:

Анализ и разбиение символьной строки на слова
всем привет) возникла проблема и как с ней справится не пойму( #include &lt;iostream&gt; #include...

Разбиение символьной строки
Необходимо открыть существующий файл с расширением &quot;.txt&quot; и в данном файле разбить каждую строку на...

Записать все слова символьной строки, чтобы каждое слово было с новой строки, и в отдельной переменной
Здравствуйте. нужно сделать задание, Записать все слова символьной строки, чтобы каждое слово было...

Разбиение строки на слова
Хочу разбить сроку на отдельные слова. Вроде разбивается, но когда вывожу, слова которые меньше или...

4
 Аватар для Kuzia domovenok
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,521
Записей в блоге: 1
19.08.2013, 22:08 2
Внимание! Тут почему-то две функции main!
циклы тут разные. в основном они проходят по строке, пока не найдут первое слово и присваивают смещение его конца ссылке wordoffset
0
 Аватар для Ded_Vasilij
233 / 215 / 63
Регистрация: 01.09.2012
Сообщений: 2,103
19.08.2013, 22:11 3
Какой цикл непонятен?

Добавлено через 57 секунд
Kuzia domovenok, точно, сразу внимания не обратил.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.08.2013, 22:13 4
Цитата Сообщение от Sublimee Посмотреть сообщение
// что возвращает (int)strlen(p1) и !isalnum(p1[0]) ?
strlen(p1) возвращает длину строки (количество символов от символа, на который указывает p1, до терминального '\0').
isalnum(p1[0]) проверяет, является ли символ, на который указывает p1, буквой или цифрой. Если да, то возвращает true.
1
7 / 7 / 1
Регистрация: 14.11.2012
Сообщений: 73
19.08.2013, 22:18  [ТС] 5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Внимание! Тут почему-то две функции main!
На второй main не смотрите.
Цитата Сообщение от proger_55 Посмотреть сообщение
Какой цикл непонятен?
C++
1
2
3
4
5
6
7
//Убрать предваряющие пробелы
// до каких пор работает цикл? 
// что возвращает (int)strlen(p1) и !isalnum(p1[0]) ?
    for ( int i = 0; i < (int)strlen(p1) && !isalnum(p1[0]); ++i ) 
    {
        ++p1;
    }
Добавлено через 4 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
strlen(p1) возвращает длину строки (количество символов от символа, на который указывает p1, до терминального '\0').
isalnum(p1[0]) проверяет, является ли символ, на который указывает p1, буквой или цифрой. Если да, то возвращает true.
Вопрос снят)
0
19.08.2013, 22:18
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.08.2013, 22:18
Помогаю со студенческими работами здесь

Разбиение строки на слова
Здравствуйте! При изучении С++ у меня возникла потребность в изучении библиотеки &lt;string.h&gt;. Дело в...

Разбиение строки на слова
Добрый день, вот такая задача. На ввод подается строка, слова разделены 1 пробелом. Необходимо...

Разбиение строки на слова
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { string str, s1, s2;...

Разбиение строки на слова
Задача: Дана строка, например, &quot;Hello Hello World&quot;, я ввожу слово, которое нужно заменить &quot;Hello&quot;...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru