Problem z nadpisaniem pliku
Ostatnio zmodyfikowano 2017-01-15 14:01
Calavera Temat założony przez niniejszego użytkownika |
Problem z nadpisaniem pliku » 2017-01-15 01:28:59 Mam problem z programem mającym zamienić pierwszą z ostatnią literą w każdym wyrazie w pliku, przy czym nie mogę wczytać całego pliku oraz używać dodatkowych plików. Sprawdziłem działanie programu dla standardowego wyjścia cout i działa jak należy, lecz kiedy biorę się za nadpisanie pliku to plik wynikowy jest kompletnie pomieszany i mimo różnych prób nie mam pojęcia co jest nie tak. using namespace std;
fstream plik;
int main() { plik.open( "tekst.txt", ios::in | ios::out ); plik.seekp( 0, ios::beg ); plik.seekg( 0, ios::beg ); vector < char > v; string wiersz1; while( getline( plik, wiersz1 ) ) { char seps[] = " "; char * token; string wymieszane, wymieszane2, wypis; wymieszane2 = ""; token = strtok( & wiersz1[ 0 ], seps ); while( token != NULL ) { wymieszane = ""; for( int i = 0; i < strlen( token ); i++ ) { v.push_back( token[ i ] ); } wymieszane += v[ v.size() - 1 ]; for( int j = 1; j < v.size() - 1; j++ ) { wymieszane += v[ j ]; } wymieszane += v[ 0 ]; wymieszane2 += wymieszane; wymieszane2 += " "; v.clear(); token = strtok( NULL, seps ); } wypis = wymieszane2.substr( 0, wymieszane2.size() - 2 ); plik << wypis; } }
|
|
j23 |
» 2017-01-15 10:59:34 std::string i strtok? Nie wystarczą string::find_first_not_of i string::find_first_of, albo dwie pętle while i isspace? Błędnie założyłeś, że wskaźniki zapisu i odczytu pliku są niezależne. One są ze sobą związane, i dlatego bez żonglerki wskaźnikami się nie obejdzie. Jakoś tak może być: ... size_t gp1 = fs.tellg();
while( std::getline( fs, s ) ) { size_t gp2 = fs.tellg(); fs.seekp( gp1 ); fs << s << '\n'; fs.seekp( gp2 ); gp1 = gp2; }
Nie zdziwiłbym się, gdybyś musiał otworzyć strumień w trybie binarnym. |
|
mokrowski |
» 2017-01-15 14:01:36 #include <fstream> #include <iostream>
using namespace std;
int main() { fstream file("slowa.txt", ios::in | ios::out | ios::binary);
string word; while(file >> word) { size_t word_size = word.size(); if(1 < word_size) { swap(word.front(), word.back()); file.seekp(file.tellg(), ios::beg).seekp(-word_size, ios::cur); file << word; file.seekp(word_size, ios::cur); } } }
|
|
« 1 » |