Строка C++, как к

Это - очень простой вопрос, и я чувствую себя глупым для выяснения у него, но я тороплюсь, и я должен понять это :)

Я просто должен знать, как сделать строку, которая содержит текст и другие переменные. Например, в Java я могу просто сделать это:

String someString;

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

someString = ("this text has printed " + i + " times"); //how do I create this line in C++?

System.out.println(someString);

i++;

}

РЕДАКТИРОВАНИЕ 4:

Хорошо, ответ G Rahul ниже довольно хороших работ, и компиляции программы и хорошо, но когда я выполняю его вместо того, чтобы получить строку, которую я хочу для имени файла, я получаю набор чисел. Например: << "frame " << i << " .jpg" создает: "013679000.jpg" вместо "кадра 0.jpg" как я хочу. Какие-либо мысли?

for(int i = 0; frames; i++)
{  
  frame = cvQueryFrame(capture); 
  std::string s = static_cast<std::ostringstream &>(std::ostringstream() << argv[1] <<  i << " .jpg").str(); 
  cvSaveImage(s.c_str(), frame);
} 
7
задан Hasturkun 24 March 2010 в 10:00
поделиться

8 ответов

Java:

int i = 5;
double d = 2.23606798;
String s = "Square root of "+i+" is "+d;

C ++:

int i = 5;
double d = 2.23606798;
std::ostringstream oss;
oss << "Square root of " << i << " is " << d;
std::string s = oss.str();
// If you need C style string...
char const *s0 = s.c_str();

Обратите внимание, что класс std :: ostringstream находится в Заголовок .

Изменить:

Ваш код (исправлен):

for(int i = 0; frames; i++) { 
  frame = cvQueryFrame(capture);
  std::ostringstream oss;
  oss << "frame " << i << " .jpg";
  cvSaveImage(oss.str().c_str(), frame);
}
7
ответ дан 6 December 2019 в 07:50
поделиться

Я разместил код для создания строк на месте здесь (в основном оболочка для скрытия std :: ostringstream ] и сделайте вызывающий код чище). Использование будет следующим:

void f( std::string const & ); // or std::string, but not std::string&

int var = 5;
f( make_string() << "prefix " << var << " postfix" );

Поскольку вам нужен const char * , вы должны использовать:

void g( const char * );
std::string s = make_string() << "prefix " << var << " postfix";
g( s.str() );
1
ответ дан 6 December 2019 в 07:50
поделиться

Есть еще один способ сделать это: использовать boost :: lexical_cast (я знаю, что он основан на std :: stringstream , но довольно полезно):

#include <string>
#include <iostream>
#include <boost\lexical_cast.hpp>

int _tmain(int argc, _TCHAR* argv[])
{
    int i = 0;
    std::string result = "this text has printed " + boost::lexical_cast<std::string, int>(i) + " times";
    std::cout<<result<<std::endl;
    std::cin.get();
    return 0;
}
3
ответ дан 6 December 2019 в 07:50
поделиться

Если вы получаете ошибку «ошибка C2664: 'cvSaveImage': невозможно преобразовать параметр 1 из 'std :: basic_string <_Elem, _Traits, _Ax>' в 'const char * ", тогда вам нужна строка стиля C, а не строка C ++:

cvSaveImage(oss.str().c_str(), frame);
0
ответ дан 6 December 2019 в 07:50
поделиться

Как о cvSaveImage (oss.str (). c_str (), frame); ? Это сделает старую строку C-типа с нулевым завершением, которую, надеюсь, примет OpenCV.

0
ответ дан 6 December 2019 в 07:50
поделиться

Для этого можно использовать stringstreams:

for (int i = 0; i < 10; i++) {
    std::ostringstream ss;
    ss << "this text has printed " << i << " times";
    std::cout << ss.str() << std::endl;
}
12
ответ дан 6 December 2019 в 07:50
поделиться

Вы знаете, что в вашем коде есть ошибка? Вы увеличиваете i в операторе for() и в конце цикла!!! Но я отвлекаюсь.

Используйте printf:

printf("Этот текст был напечатан %d раз\n",i)

Надеюсь, это поможет!

0
ответ дан 6 December 2019 в 07:50
поделиться

Это версия вашего последнего кода с удаленными специфическими функциями, чтобы я мог скомпилировать его. Он компилируется и работает:

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main() {

    for(int i = 0; i < 10; i++) { 
        ostringstream os;
        os << "frame" << i << " .jpg";
        string s = os.str();
        cout << s << "\n"; 
     }
}
0
ответ дан 6 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: