Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    18

    [C] Dividere stringa da una posizione

    salve a tutti ragazzi non ho ide a di come fare riso9lvere questo problema sapreste aiutarmi?
    ho pensato che potrei scorrere il vettore fin quando non trovo successive caratteri "/ " e salvarmi l'indice, ma non credo sia efficente potreste aiutarmi?
    Creare i file path_split.h e path_split.c che consentano di utilizzare la seguente funzione:

    extern void path_split(const char *str, char **path, char **filename);

    La funzione prende come parametri una stringa C e due puntatori a puntatore a char. La funzione deve dividere la stringa (che sarà un percorso di file) in due parti in corrispondenza del carattere \ più a destra e modificare i puntatori puntati da path e filename in modo che puntino a due nuove stringhe allocate dinamicamente contenenti le due parti della stringa: la prima fino al carattere \ incluso e la seconda il resto.
    Con il percorso c:\user\esami\FdI2017\esercizi si otterranno le stringhe c:\user\esami\FdI2017\ e esercizi.
    Con il percorso c:\\user\\esami\\FdI2017\\esercizi\\file.txt si otterranno le stringhe c:\\user\\esami\\FdI2017\\esercizi\\ e file.txt
    Con il percorso esercizi\\ si otterranno le stringhe esercizi\\ e la stringa vuota (colo terminatore).
    Se la stringa è NULL la funzione imposta i puntatori puntati da path e filename a NULL.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    18
    Quote Originariamente inviata da felx Visualizza il messaggio
    salve a tutti ragazzi non ho ide a di come fare riso9lvere questo problema sapreste aiutarmi?
    ho pensato che potrei scorrere il vettore fin quando non trovo successive caratteri "/ " e salvarmi l'indice, ma non credo sia efficente potreste aiutarmi?
    Creare i file path_split.h e path_split.c che consentano di utilizzare la seguente funzione:

    extern void path_split(const char *str, char **path, char **filename);

    La funzione prende come parametri una stringa C e due puntatori a puntatore a char. La funzione deve dividere la stringa (che sarà un percorso di file) in due parti in corrispondenza del carattere \ più a destra e modificare i puntatori puntati da path e filename in modo che puntino a due nuove stringhe allocate dinamicamente contenenti le due parti della stringa: la prima fino al carattere \ incluso e la seconda il resto.
    Con il percorso c:\user\esami\FdI2017\esercizi si otterranno le stringhe c:\user\esami\FdI2017\ e esercizi.
    Con il percorso c:\\user\\esami\\FdI2017\\esercizi\\file.txt si otterranno le stringhe c:\\user\\esami\\FdI2017\\esercizi\\ e file.txt
    Con il percorso esercizi\\ si otterranno le stringhe esercizi\\ e la stringa vuota (colo terminatore).
    Se la stringa è NULL la funzione imposta i puntatori puntati da path e filename a NULL.
    un abbozzo che ho fatto è questo:
    codice:
    #include<string.h>
    #include<stdio.h>
    extern void path_split(const char *str, char **path, char **filename) {
        int pa = strlen(str);
        size_t i = pa + 1;
        printf("%i", pa);
        while (str[i] == '\\') {
            i=i- 1;
        }
        for (size_t z = 0; z < i; z++)
            path[z] = str[z];
        path = 0;
        size_t c = 0;
        for (; str[i] != 0; i++){
            filename[c] = str[i];
        c++;
    }
        printf("%s", filename);
    }
    int main(void) {
        char *c[100];
        char *d[100];
        path_split("c:\user\esami\FdI2017\esercizi", &c, &d);
    }

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    ...
    Ultima modifica di oregon; 20-07-2018 a 17:41
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Guarda che char *c[100] sono cento puntatori a char non una stringa di 100 char.

    Comunque ti basta esaminare la stringa dalla fine all'inizio e allocare lo spazio necessario. Usa la strlen per la lunghezza di tutto il percorso; la strcpy per copiare i due oezzi e la malloc per allocare le stringhe
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    18
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Guarda che char *c[100] sono cento puntatori a char non una stringa di 100 char.

    Comunque ti basta esaminare la stringa dalla fine all'inizio e allocare lo spazio necessario. Usa la strlen per la lunghezza di tutto il percorso; la strcpy per copiare i due oezzi e la malloc per allocare le stringhe
    Il problema non dovrebbe neanche richiedermi l'allocazione dinamica dei vettori,comuque il problema è che in ingresso il prof mi darà un percorso c:\aaa\aaa\aa\a\a\a con un singolo slash lo standard del c dice che bisogna inserirne due per l'immissione del singolo slash,quindi come faccio ad arrestarmi?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quote Originariamente inviata da felx Visualizza il messaggio
    Il problema non dovrebbe neanche richiedermi l'allocazione dinamica dei vettori,comuque il problema è che in ingresso il prof mi darà un percorso c:\aaa\aaa\aa\a\a\a con un singolo slash lo standard del c dice che bisogna inserirne due per l'immissione del singolo slash,quindi come faccio ad arrestarmi?
    Il doppio backslash devi usarlo solo nelle costanti tra virgolette. In memoria è comunque un solo carattere.

    Se non devi usare l'allocazione dinamica come mai la funzione utilizza dei puntatori a char per le due stringhe risultato? Sono forse allocate esternamente nel main? Allora dovranno essere dichiarate con

    char pathname[MAX_PATH];
    char filename[MAX_PATH];

    e passerai pathname e filename alla funzione (oltre alla stringa da esaminare).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Tag per questa discussione

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.