读取以逗号分隔的字符串

时间:2015-11-23 05:37:19

标签: c scanf

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

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

有没有办法读取用逗号分隔的字符串输入?例。 string1,string2,string3

下面似乎没有用,或者我错过了什么?

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

我们还没有使用过strtok,所以我可能会质疑为什么要使用它。 它正在处理整数输入,所以我想知道字符串输入是否也可以自动分离它们。 所以我想我必须逐个读取字符串输入。

2 个答案:

答案 0 :(得分:2)

  

%s也会吃掉你的分隔符(,)。

为避免这种情况,您可以使用扫描设置。

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

扫描集之前的空格是为了避免单词之前的任何空格。你的单词可能以换行符或逗号结尾。

编辑:

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

答案 1 :(得分:0)

#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;
}