我现在正在研究一个小程序,我被卡住了.我有一个
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}]Twain和sv_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语句之后的代码?
你想用 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