Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Сформировать имя файла


Автор: Burka 13.9.2010, 12:52
Мне нужно загружать несколько файлов. В цикле я формирую строку имени файла, но я не могу понять как в си это делается.
мне нужна строка такого вида 
Цитата

"resources/1.png"


В делфи я делал так 
Код

path = "resources/"+IntToStr(i)+".png";

Подскажите как этот код будет выглядеть в си?

Автор: azesmcar 13.9.2010, 13:08
Код

char path[25];
sprintf(path, "/resources/%d.png", i);

это на Си, если имелся ввиду C++ то через std::stringstream или boost::format.

Автор: Burka 13.9.2010, 13:31
спасибо, а можно еще пример на си++

Автор: azesmcar 13.9.2010, 13:36
#1
Код

#include <sstream>
// ...
std::ostringstream stream;
// ...
stream << "/resources/" << i << ".png";
std::string path = stream.str();


#2
Код

#include <boost/lexical_cast.hpp>
// ...
std::string path = "/resources/" + boost::lexical_cast<std::string>(i) + ".png";


#3
Код

#include <boost/format.hpp>
// ...
std::string path = (boost::format("/resources/%1%.png") % i).str();


Добавлено через 59 секунд
Цитата(Burka @  13.9.2010,  12:52 Найти цитируемый пост)
В делфи я делал так 

В C++ Builder это тоже прокатит
Код

String path = "resources/"+IntToStr(i)+".png";


Автор: Burka 13.9.2010, 14:41
А что тут не правильно?
Код

    string path;
    std::ostringstream stream;
    for (int i=0; i<6; i++) 
     {
 
             stream << "resources\\" << i << ".png";
             std::string path = stream.str();
             blocks[i] = hge->Texture_Load(path); //ошибка тут
     }

выдает ошибку 
Цитата

main.cpp no matching function for call to `HGE::Texture_Load(std::string&)' 

Но не выдает если написать blocks[i] = hge->Texture_Load("resources\1png");

Автор: boostcoder 13.9.2010, 14:43
Код

blocks[i] = hge->Texture_Load(path.c_str());

Автор: azesmcar 13.9.2010, 14:43
Burka

Скорее весего HGE::Texture_Load принимает не std::string а const char *, попробуй так
Код

blocks[i] = hge->Texture_Load(path.c_str());

Автор: boostcoder 13.9.2010, 14:44
но лучше так:
Код

blocks[i] = hge->Texture_Load(stream.str().c_str()); //ошибка тут

Автор: Burka 13.9.2010, 14:46
Да спасибо, так работает.
Код

blocks[i] = hge->Texture_Load(path.c_str());

Автор: Burka 13.9.2010, 16:19
Код у меня работает, только выводит первую текстуру, вторые не выводятся. Я подозреваю что это из за того, что данные накапливаются в stream.

Код


    std::ostringstream stream;
    std::string path
    for (int i=0; i<6; i++) 
     {
 
             stream << "resources\\" << i << ".png"; //при i=1 stream = "resources/0.pngresources/1.png" но это не точно, но помоему из за этого.
             path = stream.str();
             blocks[i] = hge->Texture_Load(path); //ошибка тут
     }

Как обнулить stream переменную?

Автор: boostcoder 13.9.2010, 16:22
так:
Код

    for (int i=0; i<6; i++) 
     {
             std::ostringstream stream;
             std::string path
             stream << "resources\\" << i << ".png"; //при i=1 stream = "resources/0.pngresources/1.png" но это не точно, но помоему из за этого.
             path = stream.str();
             blocks[i] = hge->Texture_Load(path); //ошибка тут
     }

Автор: azesmcar 13.9.2010, 16:23
Код

stream.str("");

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)