我想使用/
扫描以分隔由sscanf
分隔的字符串,但它不起作用。它适用于空间。
例如,我想将50%/ 60%的字符串分成两个字符串,如50%和60%。
您可以查看代码Inferno:
#include <iostream>
using namespace std;
int extract_break_rewrites(int *m, int *n, const char *arg)
{
char m_str[10];
char n_str[10];
int err;
int count = sscanf(arg, "%s %s", n_str, m_str);
printf("%s %s %d\n",n_str, m_str,count);
if (count == 0) {
count = sscanf(arg, "/%s", m_str);
if (count == 0) {
*m = 0;
*n = 0;
return -1;
}
if (sscanf(m_str, "%d%%", m) != 1)
return -1;
}
else if (count == 1) {
if (sscanf(n_str, "%d%%", n) != 1)
return -1;
}
else if (count==2) {
if (sscanf(n_str, "%d%%", n) != 1)
return -1;
if (sscanf(m_str, "%d%%", m) != 1)
return -1;
}
return 1;
}
int main() {
int n,m;
const char * command = "50% 60%";
if (extract_break_rewrites(&m,&n,command)!=-1)
cout<<"Successful. The values of m and n are "<<m<<" and "<<n<<", respectively.\n";
else
cout<<"There was error in processing, may be input was not in the correct format.\n";
return 0;
}
您无需担心代码的作用,重要的行是10,11和主要功能。
答案 0 :(得分:3)
尝试以下方法(假设来自stdin):
scanf("%[^/]/%s");
如果从缓冲区读取,请使用sscanf(buf, ...);
。
问题是%s
scanf
假设字符串后跟一个空格。此方法指示scanf
找到由/
分隔的字符串,然后将其余字符串作为单独的字符串进行匹配。
编辑:意外删除了扫描字符串中的/
答案 1 :(得分:1)
使用扫描集
char a[100];
char b[100];
scanf("%[^/]/%s", a, b);
这将扫描所有内容,直到它获得/
,然后启动并读取字符串。
答案 2 :(得分:0)
您还可以使用ActiveJob
及其设施来获得相同的结果:
std::string