Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112

функция подсчета слов

16.11.2010, 22:40. Показов 3320. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Помгите исправить ошибку в функции подсчета слов оканчивающихся на символ

Пркатически все варианты пробывал но ничего не получаеться когда добавляеш "space" 2х или больше между словами то программа начинает воспринимать пробел как вимвол

Заранее спасибо!

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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int xcount(const char*);
int xcount(const int*);
 
int main()
{
        char str1[]="Привет! nil laba_12 chaos?      UFO";
        int str2[]={12,7,5,54,67,3,3,4,1,0};
 
        cout << "Привет! nil laba_12 chaos? UFO = " << xcount(str1) << endl;
        cout << "12,7,5,54,67,3,3,4,1,0 = " << xcount(str2) << endl;
 
        system("pause");
        return 0;
}
 
int xcount(const char* a)
{
        int counter=0;
        while(*a!='\0') {
                while((*a!=' ')&&(isalpha(*(a+1))==0)) 
            counter++;
                ++a;
                    
                                    
                        
            
                
        }
 
        return counter;
}
int xcount(const int* b)
{
        int counter1=0;
                int n=0;
        while(*b!=0) 
        {       
                        
                while(*b%2!=0&&*(b+1)%2!=0&&*(b+1)!=0)
                                {       
                                   counter1++;
                                   ++b;
                                }
                if(counter1>0) 
                    n++;
 
                                counter1=0;
                                if(*b==0)
                                    break;
                ++b;
        }
        return n;
}
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
 
int xcount(const char*);
int xcount(const int*);
 
int main()
{
        char str1[]="Привет!         nil laba_12    chaos?        UFO";
        int str2[]={12,7,5,54,67,3,3,4,1,0};
 
        cout << "Привет!       nil laba_12           chaos?          UFO = " << xcount(str1) << endl;
        cout << "12,7,5,54,67,3,3,4,1,0 = " << xcount(str2) << endl;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.11.2010, 22:40
Ответы с готовыми решениями:

Функция подсчета слов, состоящих из одной буквы
Здравствуйте помогите чутка доделать что не так надо подсчитать сколько слов в предложении начинаются с 1 буквы #include...

Не работает функция для подсчета слов с одинаковым количеством гласных и согласных!
#include &lt;iostream&gt; #include &lt;string.h&gt; #define lim &quot; \t\n!?,.&quot; using namespace std; void golprg(char str) { int...

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

13
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:02
Я бы подсчет организовал так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int xcount(const char* a, int lenstr)
{
     bool flag = FALSE;
     for (int i=0; i<lenstr; i++)
     {
           switch (a[i])
           {
                 case ' ':
                 {
                       flag = FALSE;
                  }
 
                 default:
                 {
                      if (!flag)
                           count ++;
                       flag = TRUE;
                  }
           }
     }
 
return count;
}
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:11  [ТС]
спасибо....но нам запрещают так делать
0
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:13
Так это как?
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:19  [ТС]
только можно использовать массивы , указатели , циклы и isspace isalpha ispunct и все
так как ты написал хорошо но скажут делать по другому
0
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:22
Я использовал только массивы и циклы. Switch case можно заменить на if else
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:25  [ТС]
а понял
только обьясни пожалуйста про lenstr
чему равна переменная lenstr
0
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:27
lenstr = strlen(&str1[0]);
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.11.2010, 23:28
А я бы сделал так.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
 
#define MAX_STR_LEN 250
 
int main()
{
    char Str[MAX_STR_LEN];
    fgets(Str, MAX_STR_LEN, stdin);
    char* ptr=strtok(Str, " ");
    int cnt=0;
    if(ptr)
       ++cnt;
    while(ptr)
    {
        ptr=strtok(0, " ");
        if(ptr)
          ++cnt;
    }
    printf("Words count: %d\n", cnt);
    return 0;
}
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:32  [ТС]
string нам и string запретили использовать....
если можно было бы я бы тоже с использованием string.h написал
так нет сказали весь прикол в том что вы должны написать без string
но всеравно огромное спасибо за помощь
0
13 / 13 / 6
Регистрация: 16.11.2010
Сообщений: 32
17.11.2010, 00:16
Я бы, наверное, сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main()
{
    int i,n=0;
    char m[256];
    gets(m);
   for(i=0;m[i]!=NULL;i++)
    if(m[i]!=' '&&m[i+1]==' '||m[i+1]==NULL) n++;
    cout<<n;
    return 0;
}
1
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
17.11.2010, 02:15
Цитата Сообщение от JerryJackson Посмотреть сообщение
char str1[]="Привет! nil laba_12 chaos? UFO";
У Вас в задании была именно такая строка?

Важно точно определить, какой набор символов является разделителем слов. Если только пробелы, пользуйте isspace(), а если например, так же и символы пунктуации, то нужно еще пользовать ispunct() (хидер ctype.h).

Вот первая версия, которую подсказывает логика:
C
1
2
3
4
5
6
7
8
9
10
11
12
int xcount(const char * p)
{
    int n = 0;
    while (*p)
    {
        while (*p && (isspace(*p) || ispunct(*p))) ++p;
        if (!*p) break;
        while (*p && !isspace(*p) && !ispunct(*p)) ++p;
        ++n;
    }
    return n;
}
Возвращаясь к строке-образцу, нужно отметить 2 важных момента:

1 Дело в том, что здесь есть русские символы, а это отрицательное значение (русские символы более максимального положительного значения типа данных char) и поэтому их нельзя использовать вместе с функциями ispunct(), isspace() и т.д. в исходниках CRT, например, стоят асерты на положительное значение передаваемых ей аргументов.

Данную проблему можно победить кастом из char * в unsigned char *, но это имхо не красиво:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
int xcount(const char * ptr)
{
    int n = 0;
    unsigned char * p = (unsigned char *) ptr;
    while (*p)
    {
        while (*p && (isspace(*p) || ispunct(*p))) ++p;
        if (!*p) break;
        while (*p && !isspace(*p) && !ispunct(*p)) ++p;
        ++n;
    }
    return n;
}
2. Обращаю внимание на вот это слово - laba_12 из образца. Символ '_' является знаком пунктуации, а следовательно, разделителем слов. По идее если символы пунктуации считать разделителем слов, то здесь будет два слова 'laba' и '12'.

Если символ '_' всеже необходимо использовать, то вот несколько "костыльное" решение:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int xcount(const char * ptr)
{
    int n = 0;
    unsigned char * p = (unsigned char *) ptr;
    while (*p)
    {
        while (*p && (isspace(*p) || ispunct(*p))) ++p;
        if (!*p) break;
        while (*p && !isspace(*p) && (*p == '_' || !ispunct(*p))) ++p;
        ++n;
    }
    return n;
}
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
18.11.2010, 20:40  [ТС]
.....

Добавлено через 50 секунд
не поучаеться перкпробывал наверное все уже .... неправильно считает программа



isalpha isspace
0
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
19.11.2010, 23:00  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int xcount(char* a)
{
        int counter=0;
        while(*a!='\0') {
            if((!isspace((*a)) && isalpha(*(a+1))) || (*(a+1)=='\0'))
            counter++;
                ++a;
            
            
            
            //if((isspace(*a)==0 || ispunct(*a)==0))
                //   break;
                //  if(isalpha(*a)==0)
                //      counter++;
                        
                
 
                
        }
 
        return counter;
}
Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int xcount(char* a)
{
        int counter=0;
        while(*a!='\0') {
          
            if(*a!=' ' &&*(a+1)==' ' || *(a+1)=='\0')
            ++a;
            
                
            
            
        
 
                
        }
 
        return counter;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2010, 23:00
Помогаю со студенческими работами здесь

Программа подсчета символов и слов в минуту
Пытаюсь написать программу для подсчёта слов и символов в минуту Но проблема в том , что не знаю как устроен таймер, как сделать так,...

Исправить программу подсчёта слов в файле
Здравствуйте, прошу помощи в одном вопросе... Я сделал программу которая считает количество слов в определённом файле, и все работает...

Программа подсчета слов, база данна
#include &quot;stdafx.h&quot; #define YES 1 #define NO 0 main() /* count lines, words, chars in input */ { int c, nl,...

Написать программу для подсчета слов
В тесте приводятся пример программы main_example.cpp для подсчета слов из текстового файла book1.txt. 1)Подсчитать сколько раз в...

Функция подсчёта буквы
определить функцию для вычисления количества букв &quot;c&quot; в слове... Помогите пожалуйста


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru