【问题标题】:Read string separated by comma读取以逗号分隔的字符串
【发布时间】:2015-11-23 05:37:19
【问题描述】:

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

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,所以我可能会被质疑为什么要使用它。 它正在处理整数输入,所以我想知道字符串输入是否也可以自动分隔它们。 所以我想我必须逐个读取字符串输入。

【问题讨论】:

  • Using strtok in c的可能重复
  • 将整行读入缓冲区,然后将字符串复制到逗号。例如fgets(...)
  • 谢谢,其实我可以把它读成一个完整的字符串,然后用strtok用fgets来分隔单词,但是我们还没有接触到使用strtok。因此,如果不可能,我想我必须一一阅读。
  • @fyethfyeth 你可以只使用scanf,只是需要注意说明符。
  • 我仍然认为处理逗号分隔文件的最佳方法是使用@所需的 pointerend-pointer 987654325@(等等,strtoX 系列函数)。一个简单的while (errno == 0) 循环将调用包含在strtol (p, &amp;ep, base) 中,然后设置p = ep;(或(p = (ep + 1))基本上是所需要的。

标签: c scanf


【解决方案1】:

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

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

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

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

编辑:

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

【讨论】:

  • @DavidC.Rankin 在哪种情况下失败?
  • 重点是您正在从文件中读取 字符串 而不是将其转换为数字。如果那是您的目标很好,但根据 OP 问题中的%d 建议他需要进行数字转换——他对 cme​​ts 的回答进一步支持了这一点。
  • @silentboy 酷!!这行得通!!请解释一下这些字符是做什么用的?
  • @fyethfyeth 已编辑。如果不清楚,google:scanset
【解决方案2】:
#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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多