Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153

    [c++] iostream/fstream operator>>

    buona notte a tutti...avevo una domanda sull'operatore >>. Da quando so questo operatore prende dallo stream di sinistra un dato formattato e lo mette nella variabile di sinistra. E so anche che generalmente per distinguere un dato da un altro legge finché non incontra lo spazio.
    Ora il mio problema è questo. Vorrei che l'operatore >> leggesse un dato(da un file) e lo mettesse in una stringa(std::string). Il dato però non sarà più delimitato dallo spazio ma da un altro carattere tipo '\n' '~' o altri. E' possibile?

    in alternativa è possibile far funzionare una getline con una std::string(senza usare una cstring)?

    grazie
    cogli l'attimo

  2. #2

    Re: [c++] iostream/fstream operator>>

    Originariamente inviato da c_junior
    buona notte a tutti...avevo una domanda sull'operatore >>. Da quando so questo operatore prende dallo stream di sinistra un dato formattato e lo mette nella variabile di sinistra. E so anche che generalmente per distinguere un dato da un altro legge finché non incontra lo spazio.
    Ora il mio problema è questo. Vorrei che l'operatore >> leggesse un dato(da un file) e lo mettesse in una stringa(std::string). Il dato però non sarà più delimitato dallo spazio ma da un altro carattere tipo '\n' '~' o altri. E' possibile?
    Non credo, o quantomeno, non facilmente; il "trucco" impiegato dagli stream per saltare gli spazi è piuttosto ingarbugliato, bisognerebbe modificare la definizione di spazio che lo stream ha, il che probabilmente richiederebbe la scrittura un nuovo facet.
    in alternativa è possibile far funzionare una getline con una std::string(senza usare una cstring)?
    Questo è facile, basta usare la funzione (non il metodo) getline.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    ok grazie...però non riesco a capire come mai il metodo getline non accetta std::string? alla base le std:string non sono delle cstring?
    cogli l'attimo

  4. #4
    No, sono stringhe counted; si può accedere al buffer situato al loro interno tramite il metodo data(), ma comunque il metodo getline, se gestisse le std::string come delle cstring attraverso il metodo data, si dovrebbe limitare alla lunghezza corrente del buffer contenuto nella stringa passata. Sarebbe invece auspicabile che la funzione globale getline, perfetta per lavorare con stream e stringhe C++, fosse incorporata in istream come metodo, ma, credo per migliorare la modularità della libreria C++ (così da non obbligare chi usa solo iostream ad includere anche i file relativi a std::string), ciò non è stato fatto.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.