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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
BrumbleHorse
121 / 121 / 11
Регистрация: 18.09.2010
Сообщений: 212
#1

Подсчет слов в строке - C++

02.11.2010, 17:41. Просмотров 3361. Ответов 19
Метки нет (Все метки)

Кто-нибудь может помочь с такой проблемой: нужно написать программу на С, которая подсчитывает количество слов в строке, заканчивающихся на согласную букву.. Слова разделяются пробелами. Пробовал разные варианты, но корректно они не работают ( не учитываются первое и последнее слова в строке )..
1
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2010, 17:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Подсчет слов в строке (C++):

Подсчет пятизначных слов в строке - C++
Дана задача: найти общее количество слов и подсчитать количество слов, состоящих из 5 символов. Если с первой частью все предельно ясно,...

Подсчет количества слов в строке - C++
Помогите пожалуйста написать программу для подсчета количества слов в строке

Доработка программы (Подсчет количества слов в строке) - C++
Нужно подсчитать количество слов в строке s разделенных пробелами, или запятой. Для этого нужно использовать функцию: int Words (s). Нельзя...

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

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

Количество слов в заданной строке (для каждого из слов) - C++
дано символьная строка. Слово-последовательность символов между пробелами, не содержащие пробелы усередени себя. Для каждого из слов...

19
dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 284
02.11.2010, 17:48 #2
Покажите ваш код...поможем исправить ошибки.
0
BrumbleHorse
121 / 121 / 11
Регистрация: 18.09.2010
Сообщений: 212
02.11.2010, 17:50  [ТС] #3
Вот одна из последних попыток
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
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAX 1000
void main()
{
int k,c,i,j,counter,line[MAX],word[MAX];
const char my_Consonants[]={'q','w','r','t','p','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
c=i=j=k=counter=0;
printf("This application solves task 6 from laboratory work 4.\n");
printf("*******************************************************************************\n");
printf("Please input your string:\n");
for(i=0;(c=getchar())!='\n';i++)
{
line[i]=tolower(c);
if(line[i]==' ')
{
    word[j]=i;
    ++j;
}
}
for(k=0;k<j;++k)
{
    for(i=0;i<20;++i)
    {
        if((line[word[k]-1]==my_Consonants[i]))
        ++counter;
    }
 
}
for(i=0;i<20;++i)
{
if(line[(int)strlen(line)-1]==my_Consonants[i])
++counter;
}
printf("%s%d","Number of words which end with consonant letter is: ", counter);
scanf("%d", &c);
}
1
easybudda
Модератор
Эксперт CЭксперт С++
10020 / 5943 / 1004
Регистрация: 25.07.2009
Сообщений: 11,230
02.11.2010, 17:54 #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string.h>
/*Считает количество слов в строке str, разделённых символами из строки delim, 
которые заканчиваются на любую из букв, переданных в строке tails.  
Возвращает количество найденных слов или -1 в случае ошибки. */
int tails_count(const char * str, const char * delim, const char * tails){
  char * buf, * p;
  int cnt;
  
  if ( ! str || ! delim || ! tails )
    return -1;
 
  if ( ( buf = strdup(str) ) == NULL )
    return -1;
 
  cnt = 0;
  for ( p = strtok(buf, delim); p; p = strtok(NULL, delim) )
    if ( strchr(tails, p[strlen(p) - 1]) )
      ++cnt;
 
  free(buf);
  return cnt;
}
передавайте в tails все буквы, которые считаете согласными, и будет Вам счастье...

Цитата Сообщение от BrumbleHorse Посмотреть сообщение
const char my_Consonants[]={'q','w','r','t','p','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
только вместо вот этого нужно
C
1
const char * consonants = "bcdfgh...";
строка должна нулём завершаться, а то strchr не отработает
1
KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
02.11.2010, 17:55 #5
Разделение по словам достаточно простое:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
 
int main()
{
    char string[] = "Веселые ночи уместно хмуры а страшные сказки уютом полны", *ptr;
    ptr = strtok(string, " ");
    while (ptr != NULL)
    {
        printf("%s\n", ptr);
        ptr = strtok(NULL, " ");
    }
    return 0;
}
Дальше сам сообразишь?
1
BrumbleHorse
121 / 121 / 11
Регистрация: 18.09.2010
Сообщений: 212
02.11.2010, 18:24  [ТС] #6
Всем спасибо, помогли разобраться..
1
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
02.11.2010, 19:26 #7
А можно как-то подсчитать количество слов только не используя string?
0
silent_1991
Эксперт С++
5006 / 3064 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
02.11.2010, 19:42 #8
А что тут считать. Считаешь количество пробелов, увеличиваешь результат на 1 - вот и количество слов.
1
BrumbleHorse
121 / 121 / 11
Регистрация: 18.09.2010
Сообщений: 212
02.11.2010, 19:50  [ТС] #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Просто посчитать количество слов в строке без использования string.h несложно:
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 <conio.h>
#define IN 1
#define OUT 0
void main()
{
int c, counter,state;
state=OUT;
c=counter=0;
while((c=getchar())!='\n')
{
if(c==' ')
state=OUT;
if(state==OUT)
{
state=IN;
++counter;
}
}
printf("%d",counter);
getch();
}
3
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
02.11.2010, 19:54 #10
Все понятно но как можно написать программу подсчета слов у котрых к примеру в конце стои "!"
без использования string, а пользоваться только массивами и тп.

Добавлено через 1 минуту
огромное спасибо
0
silent_1991
Эксперт С++
5006 / 3064 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
02.11.2010, 19:55 #11
А в чём разница, с точки зрения приведённой программы, между строками
abcdefg
и
abcdef!
?
1
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
02.11.2010, 19:58 #12
только немного не понятно что за переменная state и out но out походу равен 0 и если в слове нет пробела то state присваивает значение out то есть правильно?

Добавлено через 2 минуты
сори я уже понял, я думал что для "!" or "?" надо создавать отдельную переменную, мне надо написать программу которая считала те слова у которых в конце стоит символы ! ?* и тп
0
BrumbleHorse
121 / 121 / 11
Регистрация: 18.09.2010
Сообщений: 212
02.11.2010, 20:09  [ТС] #13
Ну можно сделать как-то так:
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 <conio.h>
#define IN 1
#define OUT 0
void main()
{
int line[1000],i,counter,state;
state=IN;
counter=0;
for(i=0;(line[i]=getchar())!='\n';++i)
{
if((line[i]==' ')&&(line[i-1]=='!'))
state=OUT;
if(state==OUT)
{
state=IN;
++counter;
}
}
printf("%d",counter);
getch();
}
Но тут мы сталкиваемся с недостатком: если последнее слово будет с ! на конце и мы перед завершением ввода не поставим лишний пробел, то это слово не будет учтено.. Честно говоря пока не могу придумать как это исправить.. а почему нужно это сделать обязательно без string.h?
1
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
02.11.2010, 20:15 #14
Дали такое задание.... я хотел с string сделать но сказали нет сделайте без string, потом будете делать со string....
я пытался сделать но почеему-то не получалось Visual C++ постоянно выдает какие-то странные ошибки типа после if должно стоять ; хотя после if не должно стоять ; ....
сейчас попытаюсь с переменными разобраться
0
BrumbleHorse
121 / 121 / 11
Регистрация: 18.09.2010
Сообщений: 212
02.11.2010, 20:21  [ТС] #15
Вот вроде получилось.. программа считает количество слов,содержащих на конце ! в строке
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
#include <stdio.h>
#include <conio.h>
#define IN 1
#define OUT 0
void main()
{
int line[1000],i,counter,state;
state=IN;
counter=0;
for(i=0;(line[i]=getchar())!='\n';++i)
{
if((line[i]==' ')&&(line[i-1]=='!'))
state=OUT;
if(state==OUT)
{
state=IN;
++counter;
}
}
if(line[i-1]=='!')
++counter;
printf("%d",counter);
getch();
}
1
02.11.2010, 20:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2010, 20:21
Привет! Вот еще темы с ответами:

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

В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд). - C++
В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд).

Подсчет количества слов - C++
С клавиатуры вводится строка. Составить программу, которая подсчитывает количество слов, имеющих нечетную длину; вводит на экран частоту...

Подсчет слов в файле. - C++
Помогите решить задачку... Прочитать файл и подсчитать число слов в файле.Слово считается от пробела до пробела.


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

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

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