Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   C++ Другие переменные в строке (http://forum.oszone.net/showthread.php?t=280879)

Acuna 15-04-2014 01:45 2338175

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);
Можно ли это как-то осуществить? Просто мягко говоря, это как бы суть программы - запуск других консольных утилит с параметрами :) Заранее благодарен!

User001 15-04-2014 07:26 2338205

Если в лоб, то можно получить 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 посмотрите сами.

Acuna 15-04-2014 17:03 2338451

User001, А! Хм... Таки... А вот синтаксис JS я использовать не додумался... Благодарю!

Тогда сразу хочу спросить: а что, если эти переменные я хочу использовать несколько раз в разных местах? Просто прога при этом компилируется без ошибок, но при запуске почему-то сразу вылетает...

User001 16-04-2014 15:39 2338950

Цитата:

Цитата Acuna
А вот синтаксис JS я использовать не додумался... »

Хмм, это же самый обычный C++...
Цитата:

Цитата Acuna
если эти переменные я хочу использовать несколько раз в разных местах »

А что пишет? Код тогда покажите.

Acuna 19-04-2014 00:06 2340317

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) + "\"";

программа вылетает сразу после запуска(

User001 21-04-2014 08:11 2341084

Цитата:

Цитата Acuna
Проблема возникает, когда какая-либо переменная уже включает в себя какие-либо переменные. »

Насчет включает - не совсем так, у вас оно просто копируется (или присоединяется). И дальше не должно зависеть от скопированных переменных.
Цитата:

Цитата Acuna
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;
}


pva 22-04-2014 14:23 2341550

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);


Но вообще советую поиграться, выработать навыки работы со строками и сделать как было, через батник. Имхо было лучше


Время: 20:40.

Время: 20:40.
© OSzone.net 2001-