1

Тема: Опрацювання текстових даних знайти слова які містять дві літери а

Завдання 1
Знайти і надрукувати слова заданого тексту і їх кількість, які містять по 2 букви А.
Текст довільний.
Спосіб в ведення тексту.
char s[200];
      cout<<"write"<<endl;
gets_s(s);

Мова програмування С++


Допоможіть будьласка нічо в голову нейде розумне перепробував все що знав і незнав))

2

Re: Опрацювання текстових даних знайти слова які містять дві літери а

А ви наведіть приклад того, що пробували. В принципі, тут треба:
скинути лічильник літер 'A' і запам'ятати початок слова;
іти по рядку і лічити 'A' до кінця слова;
якщо літер 2 - вивести слово від початку до кінця;
повторити все це, якщо рядок не скінчився.

3

Re: Опрацювання текстових даних знайти слова які містять дві літери а

Щось таке я багато варіантів пробував не всі зберіг.
Ось один з них.

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;

int main()
{
    
char s[200];
    cout<<"write"<<endl;
gets_s(s);
int k=0;
for (int i=0; i<strlen(s); i++)
{if (s[i]=='a') 
k++;
if(s[i]==' ')
    k++;
cout<<"word"<<k;
}

return 0;
}

4

Re: Опрацювання текстових даних знайти слова які містять дві літери а

1. Довільний текст розбиваємо на масив words, за розділювач беремо пробіл.
2. Проходимо циклом по масиву (кожне слово).
Запускаємо вкладений цикл для перебору кожної букви слова. Якщо поточна буква == A,то count++. Далі якщо count == 2,тобто кількість букв А - 2,то пишемо слово з верхнього циклу в масив a_words. Обнуляємо змінну count.
3. Рахуємо кількість елементів масиву.
4. Друкуємо елементи масиву

5 Востаннє редагувалося FakiNyan (12.11.2015 20:54:30)

Re: Опрацювання текстових даних знайти слова які містять дві літери а

то все просто дуже, вам тре опрацювати декілька можливих сітуйовин.
Перша ситуація - початок слова. І що нам робити при цьому? Окей, спершу треба якось дізнатись, що таке початок слова - а початок слова, це той знак, котрий йде відразу після пробілу, або якщо це знак самий перший в тексті.
Далі нам треба дізнатись, коли ми є в слові, а в слові ми знаходимось тоді, коли поточний знак не дорівнює пробілу.
Кінець слова - поточний знак не пробіл, а наступний пробіл або кінець тексту.
І тепер дивіться, коли ми на початку слова, то запам'ятовуємо індекс цього знаку (аби потім можна було запам'ятати це слово, якщо воно містить дві букви 'а'). Далі ми перевіряємо кожну буковку цього слова, якщо вона 'а', то збільшуємо лічильник буковок 'а' на одиницю. Якщо ми на кінці слова і лічильник буковок 'a' дорівнює 2, або більше 2, то запускаємо цикл, котрий записує в строку всі літери від початку останнього слова до першого пробілу або кінця тексту, ну і збільшуємо на одиницю лічильник усіх слів, в котрих містится два або більше 'а'

6 Востаннє редагувалося koala (12.11.2015 21:25:28)

Re: Опрацювання текстових даних знайти слова які містять дві літери а

У вас там один лічильник - k, який ви нарощуєте при будь-якій ситуації. А вам треба:
- мітка початку слова (без цього буде важко виводити слова);
- лічильник літера 'a' в поточному слові;
- лічильник слів.
Всього - 3 додаткові змінні, крім i.

Ну і gets та cout в одному коді - не добре. Вас такому вчать? Який це навчальний заклад?

7

Re: Опрацювання текстових даних знайти слова які містять дві літери а

VTrim написав:

1. Довільний текст розбиваємо на масив words, за розділювач беремо пробіл.
2. Проходимо циклом по масиву (кожне слово).
Запускаємо вкладений цикл для перебору кожної букви слова. Якщо поточна буква == A,то count++. Далі якщо count == 2,тобто кількість букв А - 2,то пишемо слово з верхнього циклу в масив a_words. Обнуляємо змінну count.
3. Рахуємо кількість елементів масиву.
4. Друкуємо елементи масиву

Щось таке?

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
 
int main()
{
    
char s[200],words[200];
    cout<<"write"<<endl;
gets_s(s);
int k=0;
for (int i=0; i<strlen(s); i++)
{
    for (int j=0; j<strlen(s); j++)
if (words[i]=='a')
   k++;
    {
        if(k==2)
        words[j]=s[i];
        cout<<s;
    }
    for (int i=0; i<strlen(s); i++)
{if (s[i]=='a') 
k++;
if(s[i]==' ')
    k++;
cout<<"word"<<k;
}
return 0;
}

8

Re: Опрацювання текстових даних знайти слова які містять дві літери а

koala написав:

У вас там один лічільник - k, який ви плюсуєте при будь-якій ситуації. А вам треба:
- мітка початку слова (без цього буде важко виводити слова);
- лічильник літера 'a' в поточному слові;
- лічильник слів.
Всього - 3 додаткові змінні, крім i.

Ну і gets та cout в одному коді - не добре. Вас такому вчать? Який це навчальний заклад?

ПНУ

9

Re: Опрацювання текстових даних знайти слова які містять дві літери а

pola4576 написав:

ПНУ

Дякую. Ну, я і не планував туди дітей віддавати вчитися.

10

Re: Опрацювання текстових даних знайти слова які містять дві літери а

Прихований текст

хто б міг подумати, що у пана koala є діти...

11

Re: Опрацювання текстових даних знайти слова які містять дві літери а

pola4576 написав:

Щось таке?

А воно у вас компілюється? У мене - ні.

12

Re: Опрацювання текстових даних знайти слова які містять дві літери а

koala написав:
pola4576 написав:

ПНУ

Дякую. Ну, я і не планував туди дітей віддавати вчитися.

В нас дуже скоротили програму і ми повинні 80% самі вчитися.
Чити шукати.

13

Re: Опрацювання текстових даних знайти слова які містять дві літери а

Прихований текст
FakiNyan написав:
Прихований текст

хто б міг подумати, що у пана koala є діти...

Хто б міг подумати, що пан Трусік не помітить слова "планував"...

14

Re: Опрацювання текстових даних знайти слова які містять дві літери а

pola4576 написав:
VTrim написав:

1. Довільний текст розбиваємо на масив words, за розділювач беремо пробіл.
2. Проходимо циклом по масиву (кожне слово).
Запускаємо вкладений цикл для перебору кожної букви слова. Якщо поточна буква == A,то count++. Далі якщо count == 2,тобто кількість букв А - 2,то пишемо слово з верхнього циклу в масив a_words. Обнуляємо змінну count.
3. Рахуємо кількість елементів масиву.
4. Друкуємо елементи масиву

Щось таке?

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
 
int main()
{
    
char s[200],words[200];
    cout<<"write"<<endl;
gets_s(s);
int k=0;
for (int i=0; i<strlen(s); i++)
{
    for (int j=0; j<strlen(s); j++)
if (words[i]=='a')
   k++;
    {
        if(k==2)
        words[j]=s[i];
        cout<<s;
    }
    for (int i=0; i<strlen(s); i++)
{if (s[i]=='a') 
k++;
if(s[i]==' ')
    k++;
cout<<"word"<<k;
}
return 0;
}

Щось подібне,але якщо не працює,то не те :)

15

Re: Опрацювання текстових даних знайти слова які містять дві літери а

Як говориться "Утро вечера мудреней'' так що завтра щось постараюся зробити ато в голову вже нічо нейде
просто голова неварить вже.
Вже 5 годину сижу)

16

Re: Опрацювання текстових даних знайти слова які містять дві літери а

VTrim написав:

1. Довільний текст розбиваємо на масив words, за розділювач беремо пробіл.
2. Проходимо циклом по масиву (кожне слово).
Запускаємо вкладений цикл для перебору кожної букви слова. Якщо поточна буква == A,то count++. Далі якщо count == 2,тобто кількість букв А - 2,то пишемо слово з верхнього циклу в масив a_words. Обнуляємо змінну count.
3. Рахуємо кількість елементів масиву.
4. Друкуємо елементи масиву

Трошки незрозумілий цей крок.
то пишемо слово з верхнього циклу в масив a_words

17

Re: Опрацювання текстових даних знайти слова які містять дві літери а

pola4576 написав:
VTrim написав:

1. Довільний текст розбиваємо на масив words, за розділювач беремо пробіл.
2. Проходимо циклом по масиву (кожне слово).
Запускаємо вкладений цикл для перебору кожної букви слова. Якщо поточна буква == A,то count++. Далі якщо count == 2,тобто кількість букв А - 2,то пишемо слово з верхнього циклу в масив a_words. Обнуляємо змінну count.
3. Рахуємо кількість елементів масиву.
4. Друкуємо елементи масиву

Трошки незрозумілий цей крок.
то пишемо слово з верхнього циклу в масив a_words

Мається на увазі з циклу,який перебирає слова з масиву words. А якщо count == 2,то писати поточний елемент(слово) в новий масив - a_words

18

Re: Опрацювання текстових даних знайти слова які містять дві літери а

VTrim написав:
pola4576 написав:
VTrim написав:

1. Довільний текст розбиваємо на масив words, за розділювач беремо пробіл.
2. Проходимо циклом по масиву (кожне слово).
Запускаємо вкладений цикл для перебору кожної букви слова. Якщо поточна буква == A,то count++. Далі якщо count == 2,тобто кількість букв А - 2,то пишемо слово з верхнього циклу в масив a_words. Обнуляємо змінну count.
3. Рахуємо кількість елементів масиву.
4. Друкуємо елементи масиву

Трошки незрозумілий цей крок.
то пишемо слово з верхнього циклу в масив a_words

Мається на увазі з циклу,який перебирає слова з масиву words. А якщо count == 2,то писати поточний елемент(слово) в новий масив - a_words

Ахх щось у мене нічо непаше.((

19

Re: Опрацювання текстових даних знайти слова які містять дві літери а

Виправте що не так будьласка просто в декотрих місцях нз як писати Google недопомагаэ.))

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
 
int main()
{
    char word[200],word_s[200];
 {   cout<<"write"<<endl;
gets_s(word);
 }
int k=0;
for (int i=0; i<strlen(word); i++)
    {
        if (word[i]=='a') 
k++;
}
    {
        if(k==2)
        //писати поточний елемент(слово) в новий масив - a_words
    k=0;
    }
{
    int n=0;
    for (int j=0; j<strlen(word_s); j++)//Повинен рахувати кількість кажись і рахує))
    if (word_s[j]==' ')
k++;
}
cout<<"Result ="<<k;
return 0;
}

20

Re: Опрацювання текстових даних знайти слова які містять дві літери а

koala написав:
pola4576 написав:

Щось таке?

А воно у вас компілюється? У мене - ні.

Перегляньте будьласка виправте якщо можна те що неправильно просто я в деяких місцях нерозумію що писати.

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
 
int main()
{
    char word[200],word_s[200];
 {   cout<<"write"<<endl;
gets_s(word);
 }
int k=0;
for (int i=0; i<strlen(word); i++)
    {
        if (word[i]=='a') 
k++;
}
    {
        if(k==2)
        //писати поточний елемент(слово) в новий масив - a_words
    k=0;
    }
{
    int n=0;
    for (int j=0; j<strlen(word_s); j++)//Повинен рахувати кількість кажись і рахує))
    if (word_s[j]==' ')
k++;
}
cout<<"Result ="<<k;
return 0;
}