Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/47: Рейтинг темы: голосов - 47, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 02.01.2012
Сообщений: 17

Функция подсчитывает количество слов в строке.

04.01.2012, 00:52. Показов 8968. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разработать функцию, которая выполняет ту обработку фрагмента текста, которая определена в Вашем индивидуальном задании. При реализации функции запрещается пользоваться функциями библиотек языка C.
условие:
Функция подсчитывает количество слов в строке.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.01.2012, 00:52
Ответы с готовыми решениями:

Напишите программу, которая подсчитывает количество слов в строке
Напишите программу, которая подсчитывает количество слов в строке.*

Функция определяющая количество слов в строке
Ребят ,скоро пойду на зачёт,если кто-нибудь может помочь,прошу,помогите. Надо будет написать несложную программу . Какую,напишу...

Функция в строке должна вычислять количество слов (слова разделяются пробелом)
int sum (const char *pS ) { const char *p (pS); int n (0); while ( *p ) { if ( isspace (*p)) ++n; p++; } ...

11
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
04.01.2012, 01:06
Посчитай количество символов, являющихся буквами, после символов таковыми не являющихся. +нужно учесть возможное наличие слова в начале строки. Профит...
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
04.01.2012, 03:35
Цитата Сообщение от NoMasters Посмотреть сообщение
Посчитай количество символов, являющихся буквами, после символов таковыми не являющихся.
О, мсье любит извращения
Достаточно ведь просто посчитать количество пробелов и всё (не забывая проверять что если текущий символ пробел и предыдущий символ пробел то нужно сдвинуться, но счётчик не инкрементировать), ведь в строке число 35325 тоже можно считать словом.
Ну или в виде кода
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    char *string="some string!, dsf    ";
    int count=0;
    string++;
    while(*string)
    {
        if (isspace(*string) && !isspace(*(string-1)))
         count++;
         string++;
    }
    printf("%d",count);
}
функцию isspace я думаю Irissha как-то уж без меня напишет.

Добавлено через 2 минуты
Хотя учитывая что она сюда обратилась ... в общем
C
1
int isspace(int x){return x==32;}
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
04.01.2012, 03:38
Таки пробел не единственный символ, который может разделять слова. К тому у тебя не учитывается первое(или последние, по вкусу) слово

Добавлено через 1 минуту
Почему бы не написать
C
1
*string == ' '
?
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
04.01.2012, 03:57
Цитата Сообщение от NoMasters Посмотреть сообщение
Таки пробел не единственный символ, который может разделять слова.
Таки за "янаписалпрограммунас++,посмотритепожалу йста" по рукам бить надо так что разделитель слов это пробел, ну а лишний пробел это ещё ладно и правда можно учесть так как выглядит нормально в отличии от слитнонаписанныхслов.

Цитата Сообщение от NoMasters Посмотреть сообщение
К тому у тебя не учитывается первое(или последние, по вкусу) слово
Угу, забыл проверить ещё что в конце слово перед 0. В общем как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
    char *string="   sf dfd   ";
    int count=0;
    if(*string)
    {
        if(!isspace(string[strlen(string+1)]))
         count++;
 
        string++;
        while(*string)
        {
            if (isspace(*string) && !isspace(*(string-1)))
            count++;
            string++;
        }
 
    }
    printf("%d",count);
}
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
04.01.2012, 04:12
Цитата Сообщение от Gepar Посмотреть сообщение
Таки за "янаписалпрограммунас++,посмотритепожалу йста" по рукам бить надо так что разделитель слов это пробел, ну а лишний пробел это ещё ладно и правда можно учесть так как выглядит нормально в отличии от слитнонаписанныхслов.
Не распарсил толком, но есть как минимум переносы строк и табуляции. Знаки препинания тоже вполне себе разделители слов. Впрочем, в данном конкретном случае, скорее всего, действительно имелись в виду только пробелы.
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
04.01.2012, 04:33
Цитата Сообщение от NoMasters Посмотреть сообщение
Не распарсил толком, но есть как минимум переносы строк и табуляции. Знаки препинания тоже вполне себе разделители слов. Впрочем, в данном конкретном случае, скорее всего, действительно имелись в виду только пробелы.
Ну всё это по желанию автор темы пускай дописывает в 13ую строку, при этом не забывая модифицировать 7ую.
Пример с добавленным условием на знаки пунктуации (чтобы "слово,слово" было = 2 слова"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
    char *string="   sf.dfd   ,";
    int count=0;
    if(*string)
    {
        if(!(isspace(string[strlen(string+1)]) || ispunct(string[strlen(string+1)])))
         count++;
 
        string++;
        while(*string)
        {
            if ((isspace(*string) || ispunct(*string)) && !(isspace(*(string-1)) || ispunct(*(string-1))))
            count++;
            string++;
        }
 
    }
    printf("%d",count);
}
Хотя условия начинают выглядить страшно и напрашивается добавление функций чтобы убрать столь длинные условия ...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
04.01.2012, 05:31
Цитата Сообщение от Irissha Посмотреть сообщение
При реализации функции запрещается пользоваться функциями библиотек языка C.
Если эту строчку не заметить, то можно так как-нибудь:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h>
 
#define DELIM " \t\n,.:;!?-"
 
int wc(char * s, const char * d){
    return ( strtok(s, d) ) ? 1 + wc(NULL, d) : 0;
}
 
int main(void){
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
        printf("%d words.\n", wc(buf, DELIM));
    
    return 0;
}
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
04.01.2012, 11:52
Цитата Сообщение от easybudda Посмотреть сообщение
Если эту строчку не заметить, то можно так как-нибудь:
В этом весь смысл задания. Такие задания очень полезны.
Осталось strtok реализовать самому.

easybudda, а Вам не кажется, что смысл этого задания, что самому strtok () реализовать?

Добавлено через 59 минут
Вот, как я бы реализовал strtok
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
#include <stdio.h>
 
char* strtok (const char *s, const char *DELIM)
{
   static char *start, *end, *last;
   char *p;
   short f;
   
   if ( s )
   {
      start = s;
      for ( end = start ; *end ; ++end ) ;
   }
   else
   {
      start = last;
      *start = *DELIM;
   }
   
   while ( start != end )
   {
      for ( p = DELIM, f = 0 ; *p && !f ; ++p  )
         if ( *start == *p )
            f = 1;
      if ( !f ) 
         break;
      else
         ++start;         
   }
   
   for ( last = start ; last != end ; ++last )
   {
      for ( p = DELIM, f = 0 ; *p && !f ; ++p )
         if ( *last == *p )
            f = 1;
      if ( f ) 
         break;
   }
   
   if ( last == start )
      return NULL;
   else   
   {
      *last = '\0';
      return start;
   }
}      
 
#define DELIM " \t\n,." 
 
int main ()
{
   char s[] = " Hello,world  Hello world  OK";
   char *p = strtok ( s, DELIM );
   while ( p )
   {
      printf ("%s\n", p );
      p = strtok ( NULL, DELIM );
   }
   
   return 0;
}
http://liveworkspace.org/code/... 38ef764ce2

Добавлено через 14 минут
Цитата Сообщение от Gepar Посмотреть сообщение
Хотя учитывая что она сюда обратилась ... в общем
А сам правильно можете реализовать? isspace это не только пробел
isspace
' ' (0x20) space (SPC)
'\t' (0x09) horizontal tab (TAB)
'\n' (0x0a) newline (LF)
'\v' (0x0b) vertical tab (VT)
'\f' (0x0c) feed (FF)
'\r' (0x0d) carriage return (CR)


http://www.cplusplus.com/refer... e/isspace/
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
04.01.2012, 13:05
Цитата Сообщение от go Посмотреть сообщение
easybudda, а Вам не кажется, что смысл этого задания, что самому strtok () реализовать?
Нет. Скорее всего нужен вот такой велосипед
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
#include <stdio.h>
 
int wc(const char * s, const char * d){
    int cnt = 0, in_word = 0;
    
    while ( *s ){
        const char * p = d;
        
        while ( *p != '\0' && *p != *s )
            ++p;
        
        if ( *p != '\0' ){
            if ( in_word ){
                ++cnt;
                in_word = 0;
            }
        }
        else
            in_word = 1;
        
        ++s;
    }
    
    if ( in_word )
        ++cnt;
    
    return cnt;
}
 
#define DELIM " \t\n,.:;!?-"
 
int main(void){
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
        printf("%d words.\n", wc(buf, DELIM));
        
    return 0;
}
1
0 / 0 / 0
Регистрация: 02.01.2012
Сообщений: 17
04.01.2012, 16:52  [ТС]
всем огромное спасибо.... очень помогли...
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
04.01.2012, 17:12
Цитата Сообщение от go Посмотреть сообщение
А сам правильно можете реализовать? isspace это не только пробел
Не подумал я об этом что-то, наверное потому что рассчитывал на обычную короткую строку, а не на чтения текста с файла, а в обычно строке редко всякие табуляции попадаются, разве что специально их туда записать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.01.2012, 17:12
Помогаю со студенческими работами здесь

Составить программу, которая подсчитывает количество слов
Пожалуйста помогите! C клавиатуры вводится строка. Составить программу, которая подсчитывает количество слов, которые имеют нечетное...

Функция, получает строку слов и рзделителей, а на выходе имеет массив слов из строки и количество этих слов
мне нужна функция, которая во входе получает строку слов и рзделителей (&quot; &quot;, &quot;,&quot;, &quot;.&quot;, &quot;_&quot;, &quot;&quot;&quot;), а на...

Программа, которая копирует содержимое входного файла в выходной; подсчитывает количество слов в тексте...
Написать программу, которая копирует содержимое входного файла в выходной; подсчитывает количество слов в тексте; выделяет слово,...

Описать рекурсивную функцию letter(s), которая подсчитывает количество букв в строке s
Описать рекурсивную функцию letter(s), которая подсчитывает количество букв в строке s. Преподаватель сказал, что внутри должно быть...

Описать функцию, которая подсчитывает максимальное количество символов, идущих подряд в строке
Добрый день! Дали задание, но не совсем ясно, а выполнить надо. Просьба написать: a)функцию, которая подсчитывает максимальное...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru