2015-06-12 6 views
-2

Я пытаюсь увеличить имя файла на основе номера, связанного с именем файла. Если я создаю переменную postFix типа int, она дает ошибку (понятно), так как я не могу объединить int в тип строки.Инкрементный номер в строке C++

В этом случае, как я могу увеличить строковую переменную?

for (int i = 0; i <= 10; i++) 
{ 
    std::string postFix = "1"; // int postFix = 1 gives an error 
    std::cout << (std::string("Image" + postFix + std::string(".png"))); 
} 
+0

Просьба пояснить «приращение» строковой переменной. Каково значение строки после ее увеличения? Если у меня есть строка «hello», что происходит после ее увеличения? –

+0

Еще одно предложение: вы можете сделать имена файлов уникальными, добавив временную метку к имени файла. – sparta93

+0

@ThomasMatthews Я хочу увеличить значение postFix от 1 до 2 до 3 до 20. 20 как для контуров цикла. – Daqs

ответ

2

Вы можете использовать std::to_string создать std::string из вашего int значения.

for (int i = 0; i <= 10; i++) 
{ 
    std::cout << "Image" + std::to_string(i+1) + ".png"; 
} 

Хотя в этом случае вы можете также просто использовать поток operator<<

for (int i = 0; i <= 10; i++) 
{ 
    std::cout << "Image" << i+1 << ".png"; 
} 
1
int value = atoi(postFix.c_str()); 
value++; 
postFix = std::to_string(value); 
+0

Вы имели в виду 'int value = std :: stoi (postFix);'? http://en.cppreference.com/w/cpp/string/basic_string/stol – kfsone

+0

Нет, я имел в виду именно то, что я положил :), но ваш работает одинаково! –

1

использование std::to_string

for (int i = 0; i <= 10; i++) 
{ 
    int postFix = 1; 
    std::cout << (std::string("Image" + std::to_string(postFix) + std::string(".png"))); 
} 
1

Вы не; использовать целочисленную переменную, и сделать строковое представление о нем, чтобы построить имя файла: std::to_string(n)

0

увеличиваем int «Номер» как ваше желание, а затем преобразовать его в строку и, наконец, добавить его с именем файла (или точно где вы хотите).

Заголовки необходимо:

#include <iomanip> 
#include <locale> 
#include <sstream> 
#include <string> // this should be already included in <sstream> 

И преобразовать 'Номер' в 'String' сделайте следующее:

int Number = 123;  // number to be converted to a string 

string Result;   // string which will contain the result 

ostringstream convert; // stream used for the conversion 

convert << Number;  // insert the textual representation of 'Number' in the characters in the stream 

Result = convert.str(); // set 'Result' to the contents of the stream 

      // 'Result' now is equal to "123" 

Эта операция может сокращаться в одну строку:

int Number = 123; 
string String = static_cast<ostringstream*>(&(ostringstream() << Number))->str(); 

Ссылка взята с here.

+0

Erh - Вы отправили свой ответ на неправильный вопрос? – kfsone

+0

@kfsone, Im в середине редактирования –

1

Написать просто

std::cout << std::string("Image") + std::to_string(i + 1) + ".png"; 

Или даже как

std::cout << "Image" + std::to_string(i + 1) + ".png"; 

Или вы можете определить на первой строке

станд:; строка = "Image" + станд :: to_string (я + 1) + ".png";

, а затем выводить его

станд :: соиЬ < < с;

1

Кажется, вы получаете его более сложным, чем необходимо.

for (int i = 1; i <= 10; i++) { 
    std::cout << "Image" << i << ".png"; 
    } 

или

for (int i = 1; i <= 10; i++) { 
    std::string filename = "Image" + std::to_string(i) + ".png"; 
    // do something with filename 
} 

to_string(int) появился в C++ 11.