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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
#1

Подсчет латинских букв - C++

14.11.2010, 15:30. Просмотров 1643. Ответов 23
Метки нет (Все метки)

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

Вот листинг

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
#include <iostream>
#include <cctype>
#include <conio.h>
 
using namespace std;
 
int xcount(const int*);//для чисел
int xcount(const char*);//для строк
int main()
{
    int i;
    int mas[] = {1,2,2,23,4,2,12,7,17,777,0};
    char mas1[] = "0x12 absd 123 43h e12 0 12g44 t";
 
    for(i=0; mas[i]!=0;++i) {
      cout << mas[i] << ' ' ;
    }
    cout << "<<<< " <<  xcount (mas) << " >>>>" <<endl;
    cout<<"__________________________________________"<<endl;
 
    cout << mas1 << "<<<< " <<  xcount (mas1) << " >>>>" << endl;
 
 
    return 0;
}
 
int xcount(const int*mas)
{
 
 int i, status = 0, n=0;
 for(i=0; mas[i]!=0;++i)
 {
     if (!(mas[i]&1) && status)
     {
       ++n;
     }
     status = mas[i] & 1;
}
 
      if (status)
 
       {
         ++n;
       }
 
return n;
}
 
int xcount(const char*mas1)
{
int i,c=0,status=0,status1=0;
 
 
  for(i=0; mas1[i]!=0;++i)
 
{
    if ((isspace(mas1[i]))&& status)
      {
       ++c;
      }
 
     status = (!isspace(mas1[i]));
 
}
     if (status)
 
       {
         ++c;
       }
 
     if (isalpha(mas1[i])&& status )
        {
         ++c;
        }
 
        status1 = (!isalpha(mas1[i]));
 
 
 
return c;
}
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2010, 15:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчет латинских букв (C++):

Подсчитать, сколько было введено: латинских прописных букв, кириллических прописных букв, цифр, знаков переноса, прочих символов. - C++
Помогите, пожалуйста, написать программу :scratch: Подсчитать, сколько было введено: латинских прописных букв, кириллических прописных...

Вывод латинских букв - C++
Подскажите, какую команду использовать для вывода букв?

Сортировка массива латинских букв - C++
набор латинских букв упорядочить по алфавиту Использовать следующие алгоритмы: сортировкой выбором, быструю сортировку Массив...

Определить число латинских букв в строке - C++
Я не знаю как сделать эту задачу. Прошу помочь.

Посчитать количество латинских букв на странице текста - C++
как посчитать число латинских букв на странице текста

Дана строка подсчитать количество латинских букв - C++
Дана строка подсчитать количество латинских букв.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.11.2010, 06:44 #2
количество идущих подряд чисел и слова которые состоят только из латинских букв
идущих подряд чисел ? что это значит ?
слова - это что ? !isspace() ? а запятые, точки ?
1
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
15.11.2010, 18:33  [ТС] #3
это значит :
количество идущих подряд нечетных чисел-( ответ должен быть 3)
количество слов состоящих из латинских букв - (ответ 2 слова absd и t)
Функция isalpha() возвращает ненулевое значение, если ее аргумент ch является буквой, в противном случае возвращается нуль. Принадлежность символа к буквам зависит от конкретного языка. Для английского языка таковыми являются прописные и строчные буквы от А до Z.
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 00:26 #4
флажки юзал когда-нибудь ?
1
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
16.11.2010, 08:20  [ТС] #5
неа(а что это обьясни пожалуйста
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 12:13 #6
Цитата Сообщение от vippi07
количество слов состоящих из латинских букв - (ответ 2 слова absd и t)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    long nwords;
    int inword;
 
    nwords = 0;
    inword = 0;
    for (i = 0; s[i] != '\0'; i++) {
        if (isalpha(s[i])) {
            if (!inword) {
                inword = 1;
                nwords++;
            }
        } else
            inword = 0;
    }
1
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
16.11.2010, 16:00  [ТС] #7
а как это правильно применитиь к программе?
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 22:00 #8
в 64 строке у тебя скобка стоит, её надо перенести за 76 строку
но там всё равно не то

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
size_t xcount(const char *s)
{
    size_t i, nwords;
    int inword;
 
    inword = 0;
    for (nwords = i = 0; s[i] != '\0'; i++) {
        if (isalpha(s[i])) {
            if (!inword) {
                inword = 1;
                nwords++;
            }
        } else
            inword = 0;
    }
    return nwords;
}
2
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
18.11.2010, 17:34  [ТС] #9
если делать по этому примеру получаеться результат 6 слов а должно быть 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
58
59
60
61
62
63
64
65
#include <iostream>
#include <cctype>
#include <conio.h>
 
using namespace std;
 
int xcount(const int*);//для чисел
int xcount(const char*);//для строк
int main()
{
    int i;
    int mas[] = {1,2,2,23,4,2,12,7,17,777,0};
    char mas1[] = "0x12 absd 123 43h e12 0 12g44 t";
 
    for(i=0; mas[i]!=0;++i) {
      cout << mas[i] << ' ' ;
    }
    cout << " = " << xcount (mas)<<endl;
    cout<<"_________________________________"<<endl;
 
    cout << mas1 << "=" <<  xcount (mas1) <<  endl;
 
 
    return 0;
}
 
int xcount(const int*mas)
{
 
 int i, a = 0, n=0;
 for(i=0; mas[i]!=0;++i)
 {
     if (!(mas[i]&1) && a)
     {
       ++n;
     }
     a = mas[i] & 1;
}
 
      if (a)
 
       {
         ++n;
       }
 
return n;
}
 
 
    int xcount(const char *mas1)
{
  int i, nwords,inword;
 
    inword = 0;
    for (nwords = i = 0; mas1[i] != '\0'; i++) {
        if (isalpha(mas1[i])) {
            if (!inword) {
                inword = 1;
                nwords++;
            }
        } else
            inword = 0;
    }
    return nwords;
}
подскажи что не правильно
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.11.2010, 02:34 #10
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* количество слов в строке и разделители слов */
size_t count_words(const char *s, const char *d)
{
    size_t i, nwords;
    int inword;
 
    inword = 0;
    for (nwords = i = 0; s[i] != '\0'; i++)
        if (isalpha(s[i])) {
            if (!inword)
                if (i == 0 || (i > 0 && strchr(d, s[i - 1]) != NULL))
                    inword = 1;
        } else if (inword) {
            inword = 0;
            if (strchr(d, s[i]) != NULL)
                nwords++;
        }
    if (inword)
        nwords++;
    return nwords;
}
C
1
    count_words(line, " ");
пример

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>
 
size_t count_words(const char *s, const char *d);
 
int main(void)
{
    const char *line = "aa";
    
    printf("%u" "\n", count_words(line, " "));
 
    printf("%u" "\n", count_words("0x12 absd 123 43h e12 0 12g44 t", " "));
    
    return 0;
}
 
#include <string.h>
#include <ctype.h>
 
/* количество слов в строке и разделители слов */
size_t count_words(const char *s, const char *d)
{
    size_t i, nwords;
    int inword;
 
    inword = 0;
    for (nwords = i = 0; s[i] != '\0'; i++)
        if (isalpha(s[i])) {
            if (!inword)
                if (i == 0 || (i > 0 && strchr(d, s[i - 1]) != NULL))
                    inword = 1;
        } else if (inword) {
            inword = 0;
            if (strchr(d, s[i]) != NULL)
                nwords++;
        }
    if (inword)
        nwords++;
    return nwords;
}
Код
[guest@localhost tests]$ ./t
1
2
[guest@localhost tests]$
1
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
19.11.2010, 09:13  [ТС] #11
а как обьеденить это с числами??можеш полностью сделать??я буду очень признателен
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.11.2010, 11:37 #12
про числа неясно
1
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
19.11.2010, 15:41  [ТС] #13
плохо что не ясно)
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.11.2010, 15:56 #14
неясно, что за задание
1
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
19.11.2010, 23:52  [ТС] #15
ВОТ ВСЯ ФОРМУЛИРОВКА ЗАДАНИЯ:
Написать программу на языке C++,реализующию перегруженную функцию xcount,получа-
ющую в качестве аргумента или массив целыхчисел,или символьную строку,и возвраща-
ющую количество подсчитанных элементов.Признаком конца числового массива считать
нулевой элемент.Функция не должна изменять переденныеей массивы.
Для массива целых чисел функция должна подсчитать максимальное количество иду-
щих подряд нечётных чисел,а для символьной строки–количество слов,состоящих только
из латинских букв.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2010, 23:52
Привет! Вот еще темы с ответами:

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

Подсчитать слова, состоящие из латинских прописных букв. - C++
int main(int argc, char* argv) { int cnt=0, i; char *str=&quot;I can use the online Help system from the Help menu.&quot;; for (i=1;...

Количество символов, отличных от латинских букв и пробелов - C++
Здравствуйте, нужно посчитать количество символов в строке, отличных от латинских букв и пробелов. Кажется, что ошибка закралась где-то в...

Подсчитать общее вхождение в строку латинских букв - C++
Дана строка символов. Подсчитать общее вхождение в строку латинских букв. Test: input: aa!220$G&quot;1o325A+5468.7 Z 5.!zz output: 8


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.11.2010, 23:52
Ответ Создать тему
Опции темы

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