Конкатенация float со строкой внутри аргументов

Сразу же нет это не дубликат. Я искал часы, чтобы сделать это, но это может быть просто, поскольку я начал кодировать несколько недель назад.

Как мне объединить строку с плавающей точкой внутри аргументов?

Я хочу быть в состоянии сделать это, но это не работает:

system("xdotool mousemove " << $2 << " " << $3);

Да, это C ++, просто я использую это внутри Bison, поэтому $ 2 и $ 3 являются переменными (которые являются числами с плавающей точкой). Как и в файле Bison, у меня много чего происходит, Я был бы признателен за решение в одной строке, например, формат, который у меня здесь.

РЕДАКТИРОВАТЬ

Проблема здесь на самом деле с конкатенацией. Я сделал это, но это все еще не работает, и дал мне ту же ошибку:

string temp = "xdotool mousemove " << $3 << " " << $4; system(temp.c_str());

РЕДАКТИРОВАТЬ 2

Извините за так много правок, но я попытался сделать

system(("xdotool mousemove " + to_string($3) + " " + to_string($4)).c_str());

но это все еще не работает 🙁 Есть другие идеи? На этот раз ошибка говорит ‘to_string’ was not declared in this scope

С уважением,
Мэтью Санетра

0

Решение

<< не является оператором конкатенации строк Использование, о котором вы думаете:

std::cout << "The value is " << x << '\n';

Тщательное изучение вышеуказанной строки покажет, что она не предполагает использованиеstd::string совсем; левый аргумент<< оператор всегда std::ostream&, (Первый явно указан, а два других — результат предыдущего << оператор, который в этом случае возвращаетstd::ostream&&.)

Сообщение об ошибке, которое вы получаете от компилятора, является абсолютно правильным, и вам следует потратить время на то, чтобы понять, что он говорит вам, по крайней мере, если ваша цель — научиться писать программы на C ++.

Стандартная библиотека C ++ перегружает + оператор для объединения std::string объекты. Но строковый литерал вроде "xdotool" это не std::string; это массив char, Вы также можете использовать + соединить std::string со строкой в ​​стиле C (то есть с символьным массивом, оканчивающимся NUL), но должен быть std::string как минимум один, если аргументы.

И нет автоматического преобразования из числа в строку, а также нет перегрузки + который занимает std::string и номер. Если вы используете C++11 или более поздний, то вы могли бы использовать std::to_string явно конвертировать.

Обычный способ использования << Оператор, который вы пытаетесь сделать, включает в себя использование объекта, похожего на поток, который просто создает строковый буфер в памяти: std::ostringstream, Thar объект реализует str метод для извлечения буфера как std::string; посмотрите пример Вот за то, что похоже на то, что вы хотите сделать.

Но, как я уже говорил, std::string не простой массив char, так что вы не можете передать его функции, ожидающей строку в стиле C. Это включает в себя все функции в стандартной библиотеке C, как system, которые ничего не знают о C ++ std::string, Так что вам нужно использовать c_str функция-член std::string объект для извлечения его данных в виде строки в стиле C.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]