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;
}
2 odpowiedzi
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.
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;
}
Podobne pytania
Powiązane pytania
Nowe pytania
c++
C ++ to język programowania ogólnego przeznaczenia. Pierwotnie został zaprojektowany jako rozszerzenie C i ma podobną składnię, ale teraz jest to zupełnie inny język. Użyj tego tagu w przypadku pytań dotyczących kodu (który ma zostać) skompilowany za pomocą kompilatora C ++. Użyj znacznika specyficznego dla wersji w przypadku pytań związanych z określoną wersją standardu [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] lub [C ++ 23] itp. .