-1

在我正在处理的代码中,输入将采用以下形式: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();


}

问题:我无法从输入命令中找到代码字插入。我猜这个问题是因为插入(15MB)这个词被认为是一个整体。有什么方法可以分解它,以便我可以将 abcd 保存到标识符“tag”中,并将 50MB 保存到标识符“内存”中?

4

1 回答 1

1

您可以使用scanf,它比 cin 更快,并且还提供了您想要的功能:

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

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

只要确保您从正确的输入中读取。

如果你真的想用 读取输入getline,你仍然可以在你的字符串sscanf之上使用来实现相同的目的:foo

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

请注意,这里额外的“s”sscanf不是错字。t并且m只是用于存储您的内容的临时字符缓冲区,如果您愿意,您可以在之后将其直接分配给一个字符串。请注意,上面的代码假设“标签”和“内存”内容的长度不超过 255 个字符。

于 2013-05-15T20:57:17.167 回答