confused20 Ответов: 2

Создайте два связанных списка—один, в котором хранятся символы верхнего регистра, а другой, в котором хранятся символы нижнего регистра.


Я не могу понять, что после того, как я узнаю прописные буквы, как я буду хранить их в другом связанном списке?

Что я уже пробовал:

# include <stdio.h>
# include <stdlib.h>
struct node
{
    char info[30];
    struct node *next;
};
struct node *start;
void create()
{   char ch='y';
    struct node *temp,*ptr;
    while(ch!='n')
    {
    temp=(struct node *)malloc(sizeof(struct node));
    printf("\n enter the node data: \n");
    scanf("%s",&temp->info);
    temp->next=NULL;
    if(start==NULL)
    {
        start=temp;
    }
    else
    {
        ptr=start;
        while(ptr->next!=NULL)
        {
            ptr=ptr->next;
        }
        ptr->next=temp;
    }
    printf("\n Do you want to continue: \n");
    ch=getch();
    }
}
void display()
{
    struct node *ptr;
    if(start==NULL)
    {
        printf("\n list is empty \n");
    }
    else
    {
        ptr=start;
        while(ptr!=NULL)
        {
            printf("%s\t",ptr->info);
            ptr=ptr->next;
        }
    }
}
void uppercase()
{
    struct node *ptr,*temp,*ptr1;
    temp=(struct node *)malloc(sizeof(struct node));
    temp->next=NULL;
    ptr=start;
    while(ptr->next!=NULL)
    {
        ptr=ptr->next;
        if(ptr->info >='A' && ptr->info <= 'Z')
        {
            temp=ptr->info;
            ptr1=temp;
        }
            ptr1->next=temp->next;

    }
}
void main()
{
    create();
    display();
    uppercase();
    display();
}

CPallini

Похоже, вы хотите разделить исходный список на два: первый-для прописных символов, второй-для строчных. Однако ваш исходный список содержит строки (то есть массив символов), а не символов.
Не могли бы вы подробно изложить свои требования?

2 Ответов

Рейтинг:
2

Richard MacCutchan

Логика довольно проста:

NodeAdd(node* List, Char Characgter)
{
    // code to add a new character to a list
}

int main()
{
    struct node* UpperList;
    struct node* LowerList;
    
    for each character in allCharacters
    {
        if character is upper
            NodeAdd(UpperList, character);
        else
            NodeAdd(LowerList, character);
    }
}


Рейтинг:
1

confused20

# include <stdio.h>
# include <stdlib.h>
struct node
{
    char info[30];
    struct node *next;
};
struct node *start;
void create()
{   char ch='y';
    struct node *temp,*ptr;
    while(ch!='n')
    {
    temp=(struct node *)malloc(sizeof(struct node));
    printf("\n enter the node data: \n");
    scanf("%s",&temp->info);
    temp->next=NULL;
    if(start==NULL)
    {
        start=temp;
    }
    else
    {
        ptr=start;
        while(ptr->next!=NULL)
        {
            ptr=ptr->next;
        }
        ptr->next=temp;
    }
    printf("\n Do you want to continue: \n");
    ch=getch();
    }
}
void display()
{
    struct node *ptr;
    if(start==NULL)
    {
        printf("\n list is empty \n");
    }
    else
    {
        ptr=start;
        while(ptr!=NULL)
        {
            printf("%s\t",ptr->info);
            ptr=ptr->next;
        }
    }
}
void uppercase()
{
    struct node *ptr,*temp,*ptr1;
    temp=(struct node *)malloc(sizeof(struct node));
    temp->next=NULL;
    ptr=start;
    while(ptr->next!=NULL)
    {
        ptr=ptr->next;
        if(ptr->info >='A' && ptr->info <= 'Z')
        {
            temp=ptr->info;
            ptr1=temp;
        }
            ptr1->next=temp->next;

    }
}
void main()
{
    create();
    display();
    uppercase();
    //display();
}


jeron1

Так это версия, которая работает? Если это так, вы должны обновить первый пост, поместив туда рабочий код и отметив, что он работает, и, возможно, то, что вы изменили, чтобы заставить его работать.