Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2021, 19:32   #1
nonameii3ii
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 73
Восклицание Подсчитать количество слов, не содержащих заданный символ(в двухсвязном списке)

Здраствуйте,есть такое задание,буду благодарен за помощь
Код:
#include <iostream>
#include<string.h>
#include <conio.h>
using namespace std;
struct List     
{
char key;       
List* pred,*next;   
};
 
 
List * Init()           
{
    List *p,*r,*beg;    
    char ch;    
    cout << "INPUT LIST"<<endl;
    ch = cin.get();         
    if (ch!='.')
    { 
        p=new (List);       
        beg=p;                  
        p->key=ch ;     
        p->pred=0;  p->next=0;  
        ch = cin.get();     
        while (ch != '.')       
 
        {
            r=new(List);    
            r->key=ch;  
            p->next=r;  
            r->pred=p;  
            r->next=0;  
            p=r;    
            ch = cin.get();         
        }
    }
return beg;
}
 
int print_list(List *beg) 
{
    int n=0;
    if (beg==0)         
        cout<<"The list is empty\n";
        return n;
    }
    List*p=beg;
    while(p)                
    {
        cout<<p->key;
        n++;
        p=p->next;      
    }
    cout<<"\n";
    return n;
}
void main()
{
List*beg;
int i,k,n;
do
{
cout<<"1.Make list\n";
cout<<"2.Print list\n";
cin>>i;
switch(i)
{
case 1:   {beg=Init(); break;}
case 2:   {n=print_list(beg);
cout<<"n="<<n<<"\n";
break;
 
while(i!=3);
}
nonameii3ii вне форума Ответить с цитированием
Старый 25.05.2021, 05:07   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Если ничего не забыл, то примерно так:
Код:
if (beg == nullptr)
    return 0;
List* p = beg;
bool is_word = false, is_forb_ch = false;
int count = 0;
do {
    char ch = p->key;
    p = p->next;
    if (ch is word_symb) { // пофиксить проверку
        is_word = true;
        is_forb_ch ||= ch == forb_ch;
    } else {
        if (is_word && !is_forb_ch)
            count++;
        is_word = false;
        is_forb_ch = false;
    }
} while (p != nullptr);
if (is_word && !is_forb_ch)
    count++;
return count;
В main сделайте "List* beg = nullptr;", а то программа сломается, если сразу пойти во второй пункт меню при запуске. Точно ли нужно хранить в списке по одному символу, а не по словам, например?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.05.2021, 07:05   #3
nonameii3ii
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 73
По умолчанию

BDA, Можете пожалуйста рассписать что к чему?)
nonameii3ii вне форума Ответить с цитированием
Старый 25.05.2021, 23:03   #4
nonameii3ii
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 73
По умолчанию

BDA, Задание звучало так Подсчитать количество слов, не содержащих заданный символ(в двухсвязном списке),наверное в списке должны быть слова
nonameii3ii вне форума Ответить с цитированием
Старый 26.05.2021, 19:59   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Если имеется уже заполненный список со словами, то:
Код:
struct List     
{
    char word[30]; // можно хранить 29буквенные слова
    List *pred, *next;
};

...

int count = 0;
List* p = beg;
while (p) {
    if (strchr(p->word, forb_ch) == NULL)
        count++;
    p = p->next;
}
return count;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 26.05.2021, 21:41   #6
nonameii3ii
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 73
По умолчанию

BDA, Можете пожалуйста написать полностью программу то я запутался как и что куда
Вот тот же "образец",и если можно расспишите что к чему:
Код:
#include <iostream>
#include<string.h>
#include <conio.h>
using namespace std;
struct List     
{
char key;       
List* pred,*next;   
};
 
 
List * Init()           
{
    List *p,*r,*beg;    
    char ch;    
    cout << "INPUT LIST"<<endl;
    ch = cin.get();         
    if (ch!='.')
    { 
        p=new (List);       
        beg=p;                  
        p->key=ch ;     
        p->pred=0;  p->next=0;  
        ch = cin.get();     
        while (ch != '.')       
 
        {
            r=new(List);    
            r->key=ch;  
            p->next=r;  
            r->pred=p;  
            r->next=0;  
            p=r;    
            ch = cin.get();         
        }
    }
return beg;
}
 
int print_list(List *beg) 
{
    int n=0;
    if (beg==0)         
        cout<<"The list is empty\n";
        return n;
    }
    List*p=beg;
    while(p)                
    {
        cout<<p->key;
        n++;
        p=p->next;      
    }
    cout<<"\n";
    return n;
}
void main()
{
List*beg;
int i,k,n;
do
{
cout<<"1.Make list\n";
cout<<"2.Print list\n";
cin>>i;
switch(i)
{
case 1:   {beg=Init(); break;}
case 2:   {n=print_list(beg);
cout<<"n="<<n<<"\n";
break;
 
while(i!=3);
}
nonameii3ii вне форума Ответить с цитированием
Старый 31.05.2021, 10:20   #7
nonameii3ii
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 73
По умолчанию

BDA, Помогите очень,сильно и срочно нужно,пожалуйста..
nonameii3ii вне форума Ответить с цитированием
Старый 31.05.2021, 20:10   #8
nonameii3ii
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 73
По умолчанию

BDA, Пожалуйста...)
nonameii3ii вне форума Ответить с цитированием
Старый 31.05.2021, 22:18   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

А у вас какие успехи по исправлению кода за прошедшие 5 дней? Я не знаю, как лучше организовать ввод слов, так как это зависит от требований (что считать словом, какие могут быть разделители, какой длины могут быть слова).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 31.05.2021, 22:26   #10
nonameii3ii
Пользователь
 
Регистрация: 16.04.2021
Сообщений: 73
По умолчанию

BDA, Успехи-никак,с каждый днем разочаровываюсь в себе сильно( Сформировать двонаправленый список символов, прекращаю введения точкой. Слова в этоом списке разделены пробелом,как-то так,помогите пожалуйста, выручите,я буду вам очень благодарен
nonameii3ii вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачи по паскалю: в строке, состоящей из слов подсчитать количество слов на заданный символ; нарисовать пирамидку Sasha_KS Паскаль, Turbo Pascal, PascalABC.NET 1 18.03.2014 22:00
Посчитать количество слов в кольцевом списке из элементов типа String, начинающихся на тот же символ, что и следующее слово. azalia Паскаль, Turbo Pascal, PascalABC.NET 7 13.01.2014 13:26
С++ 2)Посчитать количество слов, не содержащих цифр. mmf_Valya Помощь студентам 4 07.12.2012 21:24
подсчитать количество слов, в которые входит символ "е" Zhasik Паскаль, Turbo Pascal, PascalABC.NET 3 27.12.2010 10:29
Найти количество слов, содержащих цифры to-ot Фриланс 11 16.04.2010 17:56