La funzione substr() con i file non riesco ad usarla
Semplicissimo esempio:
#include
#include
#include
using namespace std;
int main()
{
freopen(“input.txt”,“r”,stdin);
freopen(“output.txt”,“w”,stdout);
string v;
for(int i=0;i<2;i++)
cin>>v[i];
string str=v.substr(0,2);
cout<<str;
}
Input: ciao
Output: niente
Se str=substr(1,1), ricevo il messaggio [terminate called after throwing an instance of ‘std::out_of_range’ what(): basic_string::substr:]
Questo mi crea problemi nel problema Tamburello
2 Mi Piace
Ok, pur non sapendo nel dettaglio l’argomento proverò a spiegare il problema (non uccidetemi se dico bestialità ).
Quando si dichiara una stinga senza specificarne la lunghezza essa avrà una size (lunghezza) impostata automaticamente a 0, quindi quando nel ciclo for prendi in input il carattere v[i]
, non accade nulla di fatto, dato che il carattere v[i]
è come se non esistesse, essendo al di fuori dei limiti di lunghezza della stringa.
Per risolvere il problema potresti:
-
Dichiarare v specificando la lunghezza: string v(lunghezza, 'carattere')
(dove il carattere 'carattere'
verrà messo su tutte le celle della stringa).
-
Fare un resize della stringa: v.resize(lunghezza)
.
-
Molto più semplicemente fare un cin di tutta la stirnga anzichè leggerla carattere per carattere: cin>>v;
(legge fino a che non incontra uno spazio o un invio e adatta la lunghezza della stringa automaticamente).
Se vuoi saperne di più sul magico mondo delle stringhe ecco il link della pagina di c++ reference: http://www.cplusplus.com/reference/string/string/
6 Mi Piace
Grazie mille! Ho risolto il problema
2 Mi Piace