读取以逗号分隔的字符串

Read string separated by comma

对于整数输入,您可以这样做。

for (int i = 0; i < count; i++) {
    scanf("%d,", &storage[i]);
}

有没有办法读取以逗号分隔的字符串输入?例子。字符串 1、字符串 2、字符串 3

以下内容似乎不起作用,或者我遗漏了什么?

for (int i = 0; i < count; i++) {
    scanf("%s,", storage[i]);
}

我们还没有接触过使用strtok,所以我可能会被问到为什么要使用它。 它正在处理整数输入,所以我想知道字符串输入是否也可以自动将它们分开。 所以我想我必须一个接一个地读取字符串输入。

%s eats your separator(,) too.

要避免这种情况,您可以使用扫描集。

scanf(" %[^,\n],", word);

扫描集前的space是为了避免space字前出现任何白色。你的话可能以换行符或逗号结尾。

编辑:

%[^] 之间的任何字符都将表示 cstring 的结尾。在这里,我们有逗号 (,) 和换行符 (\n)。所以,%[^,\n] 读取了我们想要的字符串。现在,输入后面可能包含一个 ,%[^,\n] 旁边的 , 将其从输入中丢弃,就像您在有关整数的示例中所做的那样。

#include<iostream>
#include<math.h>
using namespace std;
int getnum(string s,int j,int k)
{
    int len=s.length();
    int l=j-k;
    int num=0;
    for(int i=k;i<=j;i++)
    {
    if(s[i]==',' )
    {
        num+=(s[i]-'0')*pow(10,l);
    }
    else
    {
        num+=(s[i]-'0')*pow(10,l);
        l--;
    }
    }

return num;
}

int main()
{
    int n;
    cin>>n;
    int a[10];
    int m=0;
    string s;
    cin>>s;
    int len=s.length();
    static int f=0,j=0,i,k=0;
    int num[n];
    for(i=0;i<=len;i++)
    {


    if(s[i]==','|| i==len)
    {
        if(k==0)
        {
            num[f]=getnum(s,j-1,k);
        }
        else
        {
            num[f]=getnum(s,j-1,k);
        }
        f++;
        k=i+1;
        j=i+1;
        continue;
    }
    else
    {
        j++;
        continue;
    }
    }

for(int i=0;i<f;i++)
{
    cout<<num[i]<<endl;
}
    return 0;
}