Показать полную графическую версию : C++ Другие переменные в строке
Всем привет!
Переписываю свой батник на плюсы. Все уперлось в банальный вопрос:
Вот у меня есть такой кусок:
char file_name = 'что-то';
string others = 'еще что-то';
string params = "file.exe -name \"file_name\" -p =\"others\""
Тут file_name и other - переменные. Их значение может быть определено где-то ранее, может вводиться с клавиатуры, или как-то еще. Говоря проще, переменная string на месте этих переменных должна иметь значения этих переменных. Она потом должна в WinExec засунуться так:
WinExec (params.c_str (), 1);
Можно ли это как-то осуществить? Просто мягко говоря, это как бы суть программы - запуск других консольных утилит с параметрами :) Заранее благодарен!
Если в лоб, то можно получить params так:
#include <iostream>
#include <string>
int main()
{
char file_name[] = "1.txt";
std::string others = "something else";
std::string params = "file.exe -name \"" + std::string(file_name) +
"\" -p =\"" + others + "\"";
std::cout << params << std::endl;
return 0;
}
VS под руками нет, так что с WinExec посмотрите сами.
User001, А! Хм... Таки... А вот синтаксис JS я использовать не додумался... Благодарю!
Тогда сразу хочу спросить: а что, если эти переменные я хочу использовать несколько раз в разных местах? Просто прога при этом компилируется без ошибок, но при запуске почему-то сразу вылетает...
А вот синтаксис JS я использовать не додумался... »
Хмм, это же самый обычный C++...
если эти переменные я хочу использовать несколько раз в разных местах »
А что пишет? Код тогда покажите.
User001, я просто PHP/JS программист, а это я просто свой старый батник переписываю для души)
Проблема возникает, когда какая-либо переменная уже включает в себя какие-либо переменные. То есть с таким куском все нормально:
string copyright = "(c) 2013-2014 Acuna.";
string params = "\"Created with " + string (copyright) + "\"";
тогда как при
string copyright = "Console Audio Tools v" + version + " " + name + "";
string params = "\"Created with " + string (copyright) + "\"";
программа вылетает сразу после запуска(
Проблема возникает, когда какая-либо переменная уже включает в себя какие-либо переменные. »Насчет включает - не совсем так, у вас оно просто копируется (или присоединяется). И дальше не должно зависеть от скопированных переменных.
string copyright = "Console Audio Tools v" + version + " " + name + "";»
+ "" Не обязательно.
Насчет вылетает - видимо, надо смотреть функцию целиком.
Вот это, например, не вылетает.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name = "Fedor";
string version = "0.0.1";
string copyright = "Console Audio Tools v" + version + " " + name + "";
string params = "\"Created with " + string (copyright) + "\"";
cout << copyright << endl;
cout << params << endl;
return 0;
}
Acuna, ещё вариант (больше параметризован, можно играть с синтаксисом):
void replace_all(string& str, const string& samp, const string& repl) {
static unsigned const nowhere=string::npos;
unsigned pos, samp_len=samp.length(), repl_len=repl.length();
for(pos=0; nowhere!=(pos=string.find(samp, pos)); pos+=repl_len) {
string.replace(pos, samp_len, repl);
}
}
string
others = "...",
params = "...",
cmdline = "file.exe -name \"$(params)\" -p =\"$(other)\"";
string eval=cmdline;
replace_all(eval, "$(params)", params);
replace_all(eval, "$(other)", other);
WinExec(..., eval.c_str(), 1);
Но вообще советую поиграться, выработать навыки работы со строками и сделать как было, через батник. Имхо было лучше
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC