С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
#1

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

16.11.2010, 22:40. Просмотров 1568. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2010, 22:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос функция подсчета слов (C++):

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

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

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

функция подсчета палиндромов - C++
Написала программу, которая обрабатывает строки, но одну функцию никак не могу написать. На вход подается строка, а функция должна находит...

Функция подсчета времени - C++
Добрый вечер. Мне нужно узнать время выполнения сортировки в миллисекундах.Почему то когда хочу узнать время следующим способом, выводит...

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

13
DiakonX
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:02 #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
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
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:11  [ТС] #3
спасибо....но нам запрещают так делать
0
DiakonX
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:13 #4
Так это как?
1
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:19  [ТС] #5
только можно использовать массивы , указатели , циклы и isspace isalpha ispunct и все
так как ты написал хорошо но скажут делать по другому
0
DiakonX
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:22 #6
Я использовал только массивы и циклы. Switch case можно заменить на if else
1
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:25  [ТС] #7
а понял
только обьясни пожалуйста про lenstr
чему равна переменная lenstr
0
DiakonX
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:27 #8
lenstr = strlen(&str1[0]);
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
16.11.2010, 23:28 #9
А я бы сделал так.
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
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:32  [ТС] #10
string нам и string запретили использовать....
если можно было бы я бы тоже с использованием string.h написал
так нет сказали весь прикол в том что вы должны написать без string
но всеравно огромное спасибо за помощь
0
Dimon4ik32
13 / 13 / 1
Регистрация: 16.11.2010
Сообщений: 32
17.11.2010, 00:16 #11
Я бы, наверное, сделал так:
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
2959 / 1304 / 239
Регистрация: 19.01.2009
Сообщений: 3,431
Завершенные тесты: 1
17.11.2010, 02:15 #12
Цитата Сообщение от 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
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
18.11.2010, 20:40  [ТС] #13
.....

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



isalpha isspace
0
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
19.11.2010, 23:00  [ТС] #14
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
19.11.2010, 23:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2010, 23:00
Привет! Вот еще темы с ответами:

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

Функция подсчета максимума строки - C++
Есть массив : #include &lt;iostream&gt; using namespace std; int main(){ int const n=3; int i,j,max; int...

Дружественная функция подсчета площадей - C++
В общем простенькую программу для подсчета площадей написал, а вот как переделать с дружественной функцией - не совсем понял, пробовал,...

Функция подсчета введенных чисел - C++
Функции.Вводятся целые числа, пока не будет введен 0. Подсчитать, сколько всего будет введено чисел, а также получить сумму тех чисел,...


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

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

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