Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75

    [C] Estrapolazione sottostringhe da stringa in input.

    Come da titolo devo ottenere delle sottostringhe da un'unica stringa immesa in input.
    Le sottostringhe sono suddivise dallo spazio, terminano quando viene rilevato il PUNTO.
    Inoltre devo poter salvare queste sottostringhe cosi ottenute da qualche parte.

    Esempio:

    input:
    codice:
    lunedi martedi mercoledi giovedi venerdi.  sabato domenica
    la funzione in questione dovrebbe scindere le seguenti sottostringhe:
    codice:
    lunedi
    martedi
    mercoledi
    giovedi
    venerdi
    e salvarle per poi riutilizzarle.

    Esiste in C qualche funzione ad hoc ? Qualche suggerimento ? Grazie

  2. #2

  3. #3
    Già che ci sono posto una mia soluzione:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define STR_SIZE 20
    
    typedef struct _Node{
    
       char str[STR_SIZE];
       struct _Node *next;
    
    } Node;
    
    Node* newNode(Node *previous);
    
    int main(void){
    
       const char *string = "lunedi martedi mercoledi giovedi venerdi. sabato domenica";
       Node *root = newNode(NULL);
       Node *tmpRoot = NULL;
    
       memset(root, '\0', sizeof(Node));
    
       tmpRoot = root;
    
       while(*string){
    
          Node *tmp = tmpRoot;
          int i = 0;
    
          while(*string != ' ' && *string != '.'){
    
             tmp->str[i++] = *string++;
    
          }
    
          if(*string == ' ')
             string++;
          else if(*string == '.')
             break;
    
          tmpRoot = newNode(tmp);
    
       }
    
       tmpRoot = root;
    
       while(tmpRoot != NULL){
    
          Node *tmp = tmpRoot->next;
    
          printf("%s\n\n", tmpRoot->str);
          
          free(tmpRoot);
          tmpRoot = tmp;
    
       }
    
       return EXIT_SUCCESS;
    
    }
    
    Node* newNode(Node *previous){
    
       Node *node = NULL;
    
       if((node = malloc(sizeof(Node))) == NULL){
    
          puts("newNode");
          exit(EXIT_FAILURE);
    
       }
    
       node->next = NULL;
    
       if(previous)
          previous->next = node;
    
       return node;
    
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.