Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/35: Рейтинг темы: голосов - 35, средняя оценка - 4.89
122 / 122 / 16
Регистрация: 18.09.2010
Сообщений: 212
1

Подсчет слов в строке

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

Author24 — интернет-сервис помощи студентам
Кто-нибудь может помочь с такой проблемой: нужно написать программу на С, которая подсчитывает количество слов в строке, заканчивающихся на согласную букву.. Слова разделяются пробелами. Пробовал разные варианты, но корректно они не работают ( не учитываются первое и последнее слова в строке )..
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2010, 17:41
Ответы с готовыми решениями:

Подсчёт слов в строке. Подсчёт символов в словах строки
Начал изучение строк в С++. Решая задачу по поиску количества строк и количеству указанных символов...

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

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

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

19
99 / 99 / 14
Регистрация: 14.06.2010
Сообщений: 284
02.11.2010, 17:48 2
Покажите ваш код...поможем исправить ошибки.
0
122 / 122 / 16
Регистрация: 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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
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
57 / 57 / 5
Регистрация: 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
122 / 122 / 16
Регистрация: 18.09.2010
Сообщений: 212
02.11.2010, 18:24  [ТС] 6
Всем спасибо, помогли разобраться..
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
02.11.2010, 19:26 7
А можно как-то подсчитать количество слов только не используя string?
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
02.11.2010, 19:42 8
А что тут считать. Считаешь количество пробелов, увеличиваешь результат на 1 - вот и количество слов.
1
122 / 122 / 16
Регистрация: 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
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
02.11.2010, 19:54 10
Все понятно но как можно написать программу подсчета слов у котрых к примеру в конце стои "!"
без использования string, а пользоваться только массивами и тп.

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

Добавлено через 2 минуты
сори я уже понял, я думал что для "!" or "?" надо создавать отдельную переменную, мне надо написать программу которая считала те слова у которых в конце стоит символы ! ?* и тп
0
122 / 122 / 16
Регистрация: 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
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
02.11.2010, 20:15 14
Дали такое задание.... я хотел с string сделать но сказали нет сделайте без string, потом будете делать со string....
я пытался сделать но почеему-то не получалось Visual C++ постоянно выдает какие-то странные ошибки типа после if должно стоять ; хотя после if не должно стоять ; ....
сейчас попытаюсь с переменными разобраться
0
122 / 122 / 16
Регистрация: 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
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
02.11.2010, 20:43 16
Написатьпрограммуна языке C++, реализующиюперегруженнуюфункциюxcount, получа-
ющую в качестве аргумента или массив целых чисел, или символьную строку, и возвраща-
ющую количество подсчитанных элементов. Признаком конца числового массива считать
нулевой элемент. Функция не должна изменять переденные ей массивы.
Для массива целых чисел функция должна подсчитать количество последовательно-
стей из нечётных чисел, а для символьной строки – количество слов, которые оканчиваются
не на пробельный символ (конец строки также считать не пробельным символом).
Пример:
[ 12 7 5 54 67 3 3 4 1 0 ] - 2
"Привет! nil laba_12 chaos? UFO" - 3
В функции main следует подготовить исходные данные, вызвать оба варианта функ-
ции, а затем вывести исходные данные и результаты. Предусмотреть меры против аварий-
ного завершения программы из-за неправильно указанных аргументов.

Добавлено через 3 минуты
слушай можеш обьяснить что у тебя значит state ?

Добавлено через 1 минуту
не могу понять это кусок
C++
1
2
3
4
5
6
7
8
9
while((cin >> c)!='\n')
{
if(c==' ')
state=OUT;
if(state==OUT)
{
state=IN;
++counter;
}
Добавлено через 2 минуты
если переменная c(эта наша переменная для слов) равна пробелу то state присваивает OUT(присваивает 0) если state=OUT (0) то state = IN (1) а потом counter начинает считать?
0
122 / 122 / 16
Регистрация: 18.09.2010
Сообщений: 212
02.11.2010, 20:47  [ТС] 17
IN и OUT означают состояние: внутри или вне слова мы находимся.. если встречаем символ пробел значит предыдущее слово закончилось и следовательно state становится out(вне слова).. как только state становится OUT мы проверяем: если предыдущее слово удовлетворяет условию, увеличиваем счетчик и начинаем новое слово(state=IN), а если не удовлетворяет,то просто начинаем новое слово(state=IN) без увеличения счетчика

Добавлено через 1 минуту
Это я про программу, которая считает слова с ! на конце..В самой первой программе еще проще: там мы просто увеличиваем счетчик переходя к новому слову
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
02.11.2010, 20:52 18
C++
1
2
3
4
5
6
7
8
9
10
11
12
char c[50];
int counter;
counter=0;
 
while((cin >> c)!='\n')
{
if(c[50]==' ')
counter++;
if(c[50]!=' ')
counter--;
}
cout << counter;
Добавлено через 1 минуту
Все понял

Добавлено через 4 минуты
спасибо еще раз
0
122 / 122 / 16
Регистрация: 18.09.2010
Сообщений: 212
02.11.2010, 21:01  [ТС] 19
Только у массива из 50 элементов последний элемент будет Array[49], так как первый элемент имеет индекс [0] а не [1]..
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
03.11.2010, 19:40 20
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
#include "stdafx.h"
#include <iostream>
#include <cctype>
 
using namespace std;
 
int xcount1(char*);
int xcount2(int*);
 
int _tmain(int argc, _TCHAR* argv[])
{
    char str1[]="Привет! nil laba_12 chaos? UFO";
    int str2[]={12,7,5,54,67,3,3,4,1,0};
    
 
    cout << xcount2(str2) << endl;
    cout <<  xcount1(str1) << endl;
 
 
    return 0;
}
int xcount1(char* a)
{
    int i=0;
    int counter=0;
    int n=0;
    while(a[i]!='\0')
    {
if((a[i]==' ')&&(a[i-1]==isalpha(a[i])))
counter++;
else
n=0;
    }
    cout << "Char=" << counter << endl;
    return counter;
}
int xcount2(int* b)
{
 int i=0;
 int counter1=0;
 int n1=0;
 while(b[i]!='\0')
 {
     if(b[i]%2!=0)
         counter1++;
     else
         n1=0;
 }
 cout << "Int=" << counter1 << endl;
 return counter1;
}
0
03.11.2010, 19:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2010, 19:40
Помогаю со студенческими работами здесь

Подсчет количества слов в строке
Все привет. Помогите пожалуйста написать код на с++ С клавиатуры вводится текстовая строка....

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru