删除两个字符之间的文本

Syx*_*pen 0 c++

我现在正在研究一个小程序,我被卡住了.我有一个

const char *dvar_hostname;
Run Code Online (Sandbox Code Playgroud)

我在这个char数组上写了一个字,fe

"[12]1234" or "1234"
Run Code Online (Sandbox Code Playgroud)

所以现在我必须检查我写的那个单词是否char*包含[],如果是这样,删除括号和其中的文本,所以

"[12]1234"
Run Code Online (Sandbox Code Playgroud)

"1234"
Run Code Online (Sandbox Code Playgroud)

它需要const char*再次写在最后(所以我认为你需要使用一个临时字符串).我试过这样的事情:

dvar_hostname = "[12]1234";
            string host = string(dvar_hostname);
            if(host.substr(1) == "[")
            {
                string str = string(dvar_hostname);
                unsigned first = str.find("]");
                unsigned last = str.find("[");
                string newString = str.substr (first,last-first);
                const char *tempHostName = newString.c_str();
            }
Run Code Online (Sandbox Code Playgroud)

但这并没有像我想的那样,所以任何帮助都非常感谢.

编辑:

if(strcmp(dvar_hostname2, Dvar_GetString("sv_hostname")))
        {
            dvar_hostname2 = Dvar_GetString("sv_hostname");
            dvar_hostname1 = Dvar_GetString("sv_hostname");
            printf("sv_hostname[w/ Clantag]: %s\n", dvar_hostname1);
            bool open_bracket = true;
            bool end = false;

            size_t pos_open = 0;
            size_t pos_close = 0;

            string dh(dvar_hostname1);//get string value
            while(!end){
                pos_open = dh.find('[');
                pos_close = dh.find(']');


                if(pos_open == string::npos || pos_close == string::npos || pos_close < pos_open){
                    end = true;
                }else{
                    dh.erase(pos_open, pos_close - pos_open + 1);
                }
            }
            dvar_hostname1 = dh.c_str();
            printf("sv_hostname[w/o Clantag]: %s\n", dvar_hostname1);
        }
Run Code Online (Sandbox Code Playgroud)

打印出来:sv_hostname[w/ Clantag]: [{TM}]Twainsv_hostname[w/o Clantag]: Twain, btwdvar_hostname1&2 are boothconst char*`然后在其他地方我这样做:

if(!strcmp(Player(Client).getGT(), dvar_hostname1)
Run Code Online (Sandbox Code Playgroud)

// Player(Client).getGT()在这种情况下返回"Twain"...任何想法为什么它不能继续这个if语句之后的代码?

Dav*_*vid 6

你想用 erase

size_t first = str.find("[");
size_t last = str.find("]", first);
str.erase(first,last-first+1);
Run Code Online (Sandbox Code Playgroud)

请记住,您需要检查第一个或最后一个是否等于 std::npos