从字符串中提取特定的文本模式

时间:2014-11-08 11:21:12

标签: c++ string scanf

我有一个字符串如下,

" 0/41/9 / 71.94 PC:0x82cc(add)"

所需的输出是方括号()

之间的文本

Ex:output = add,

表示上面指定的字符串

使用sscanf如何完成? 有没有更好的方法在C ++中做到这一点?

2 个答案:

答案 0 :(得分:0)

仅限string次操作:

std::string text = "0/41/9/71.94 PC:0x82cc (add)";

auto pos = text.find('(') + 1;
auto opcode = text.substr(pos, text.find(')', pos) - pos);

Demo

使用sscanf,它看起来像这样:

std::string opcode(5, '\0'); // Some suitable maximum size

sscanf(text.c_str(), "%*[^(](%[^)]", &opcode[0]);

Demo

答案 1 :(得分:0)

它很容易,你应该试试自己,想想如何在数组中搜索,然后想想如果我能比较一个数组的内容,那么每件事都是可能的,作为程序员你必须创造想法,但是,如果我被要求编写这样的程序,我会这样做:

int i=0, p=0;
char string="0/41/9/71.94 PC:0x82cc (add)", nstr[100];
while(string[i]!='\0')
{
while(string[i]!='(')
i++;
if (string[i]=='(')
{
i++;
goto end;
}
end:
while (string[i]!=')' || string[i]!='\0')
{
nstr[p]=string[i];
p++;
i++;
}
nstr[p]='\0';
cout<<Output = "<<nstr<<"\n";

我知道这很长,但这会让你更深入地理解解析或分割字符串,希望我帮助你,谢谢你......