Hi chcę zapisać wiele różnych plików csv z funkcji z konwencją nazewnictwa opartą na innej wartości podwójnej. Robię to za pomocą pętli for i przekazuję wartość ciągu, aby zapisać każdy plik .csv inaczej. Poniżej znajduje się przykład tego, co staram się osiągnąć pożądany rezultat

1.1_file.csv
1.2_file.csv

Ale zamiast tego dostaję

1.1_file.csv
1.11.2_file.csv

Oto działający przykładowy kod, co mogę zrobić, aby to naprawić

#include <sstream>
#include <iomanip>
#include <cmath>
#include <iostream>
#include <vector>

int main(){
    std::string file = "_file.csv";
    std::string s;
    std::ostringstream os;
    double x;

    for(int i = 0; i < 10; i++){
        x = 0.1 + 0.1 *i;
        os << std::fixed << std::setprecision(1);
        os << x;
        s = os.str();
        std::cout<<s+file<<std::endl;
        s.clear();
    }

    return 0;
}
c++
0
pyCthon 24 wrzesień 2012, 06:55

2 odpowiedzi

Najlepsza odpowiedź

ostringstream nie resetuje się przy każdej iteracji pętli, więc po prostu dodajesz do niego x w każdej iteracji; umieść go wewnątrz zakresu for, aby os był innym czystym obiektem w każdej iteracji, lub zresetuj zawartość za pomocą os.str("").

Również zmienna s jest niepotrzebna; możesz po prostu zrobić

std::cout << os.str() + file << std::endl;

I nie potrzebujesz s i eliminujesz obciążenie związane z tworzeniem kopii ciągu.

1
Seth Carnegie 24 wrzesień 2012, 06:57

Twój strumień strumieniowy jest dołączany do każdej iteracji pętli. Powinieneś go wyczyścić i użyć ponownie, jak pokazano poniżej (dzięki uprzejmości: Jak ponownie wykorzystać strumień ostringstream? jak ponownie wykorzystać ostringstream)

#include <sstream>
#include <iomanip>
#include <cmath>
#include <iostream>
#include <vector>

int main() {

    std::string file = "_file.csv";
    std::string s;

    double x;
    std::ostringstream os;

    for (int i = 0; i < 10; i++) {

        x = 0.1 + 0.1 * i;
        os << std::fixed << std::setprecision(1);
        os << x;
        s = os.str();
        std::cout << s + file << std::endl;
        os.clear();
        os.str("");
    }

    return 0;
}
1
Community 23 maj 2017, 14:43