在我正在处理的代码中,输入将是以下形式: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”中?
答案 0 :(得分:1)
您可以使用比{cin更快的scanf
并提供您想要的功能:
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);
请注意sscanf
中的额外's'不是拼写错误。 t
和m
只是用于存储内容的临时字符缓冲区,如果您愿意,可以将其直接分配给字符串。请注意,上面的代码假设“标签”和“内存”内容各不超过255个字符。