打破输入句子

时间:2013-05-15 20:16:50

标签: c++ string

在我正在处理的代码中,输入将是以下形式:abcd = insert(15MB)。我需要做的是在标识符'abcd'中插入15MB。这是我的代码。

#include <iostream>
#include <algorithm>
#include <string>
#include <iomanip>
#include <limits>
#include <stdio.h>


using namespace std;



string extract(string pMem);
double toByte(int phyMem, string val);

string pMem, comment, sGen, val,foo;
int gen, phyMem, i=0, oBrckt=0, cBrckt=0;
double pmemSize =0;

int main()
{
 getline(cin,foo);     

  if((foo.find("insert"))!= string::npos)
    cout<<"Found insert"<<endl;

  cin.clear();


}

问题:我无法从输入命令中找到代码字insert。我猜这个问题是因为单词insert(15MB)被认为是一个整体。有没有办法打破它,以便我可以将abcd保存到标识符“tag”,并将50MB保存到标识符“Memory”中?

1 个答案:

答案 0 :(得分:1)

您可以使用比{cin更快的scanf并提供您想要的功能:

char t[256], m[256];
scanf("%s = insert(%[^)]);", t, m);
string tag = t, Memory = m;

这基本上意味着:读取一个字符串,然后跳过“= insert(”,然后读取内部字符串直到找到')',然后跳过最后的“);”。

确保您正在阅读正确的输入。

如果您确实想要使用getline阅读输入,您仍然可以使用sscanffoo字符串之上实现相同的目标:

sscanf(foo.c_str(), "%s = insert(%[^)]);", t, m);

请注意sscanf中的额外's'不是拼写错误。 tm只是用于存储内容的临时字符缓冲区,如果您愿意,可以将其直接分配给字符串。请注意,上面的代码假设“标签”和“内存”内容各不超过255个字符。