如何使用sscanf扫描由`/`分隔的两个字符串?

时间:2016-04-04 21:30:22

标签: c++ scanf format-specifiers

我想使用/扫描以分隔由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和主要功能。

3 个答案:

答案 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