Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 22:40     функция подсчета слов #1
Здравствуйте!
Помгите исправить ошибку в функции подсчета слов оканчивающихся на символ

Пркатически все варианты пробывал но ничего не получаеться когда добавляеш "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;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
}
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:11  [ТС]     функция подсчета слов #3
спасибо....но нам запрещают так делать
DiakonX
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:13     функция подсчета слов #4
Так это как?
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:19  [ТС]     функция подсчета слов #5
только можно использовать массивы , указатели , циклы и isspace isalpha ispunct и все
так как ты написал хорошо но скажут делать по другому
DiakonX
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:22     функция подсчета слов #6
Я использовал только массивы и циклы. Switch case можно заменить на if else
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:25  [ТС]     функция подсчета слов #7
а понял
только обьясни пожалуйста про lenstr
чему равна переменная lenstr
DiakonX
63 / 11 / 1
Регистрация: 15.11.2010
Сообщений: 29
16.11.2010, 23:27     функция подсчета слов #8
lenstr = strlen(&str1[0]);
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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;
}
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
16.11.2010, 23:32  [ТС]     функция подсчета слов #10
string нам и string запретили использовать....
если можно было бы я бы тоже с использованием string.h написал
так нет сказали весь прикол в том что вы должны написать без string
но всеравно огромное спасибо за помощь
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;
}
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,210
Завершенные тесты: 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;
}
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
18.11.2010, 20:40  [ТС]     функция подсчета слов #13
.....

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



isalpha isspace
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2010, 23:00     функция подсчета слов
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
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;
}
Yandex
Объявления
19.11.2010, 23:00     функция подсчета слов
Ответ Создать тему
Опции темы

Текущее время: 09:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru