所以我用C写了这个,所以sscanf在s中扫描然后丢弃它,然后在d中扫描并存储它。因此,如果输入为“Hello 007”,则扫描Hello但丢弃,并将d7存储在d。
中static void cmd_test(const char *s)
{
int d = maxdepth;
sscanf(s, "%*s%d", &d);
}
所以,我的问题是如何在C ++中做同样的事情?可能使用stringstream?
答案 0 :(得分:5)
#include <string>
#include <sstream>
static void cmd_test(const char *s)
{
std::istringstream iss(s);
std::string dummy;
int d = maxdepth;
iss >> dummy >> d;
}
答案 1 :(得分:3)
你无法真正提取出一个匿名字符串,但你可以制作一个虚拟字符并忽略它:
#include <string>
#include <istream>
// #include <sstream> // see below
void cmd_test(std::istream & iss) // any std::istream will do!
{
// alternatively, pass a `const char * str` as the argument,
// change the above header inclusion, and declare:
// std::istringstream iss(str);
int d;
std::string s;
if (!(iss >> s >> d)) { /* maybe handle error */ }
// now `d` holds your value if the above succeeded
}
请注意,提取可能会失败,因为我输入了条件。这取决于您在发生错误时所执行的操作; C ++要做的就是抛出一个异常(尽管你的实际函数已经传达了错误,你可能只能return
出错。)
使用示例:
#include <iostream>
#include <fstream>
int main()
{
cmd_test(std::cin);
std::ifstream infile("myfile.txt");
cmd_test(infile);
std::string s = get_string_from_user();
std::istringstream iss(s);
cmd_test(iss);
}
答案 2 :(得分:1)
怎么样:
#include <string>
#include <sstream>
static void cmd_test(const std::string &s)
{
int d = maxdepth;
std::string dont_care;
std::istringstream in(s);
in >> dont_care >> d;
}