9

我正在尝试从字符串中扫描单词和数字,如下所示:“ hello, world, I, 287876, 6.0 ” <-- 这个字符串存储在一个char数组(字符串)中我需要做的是将事情分开并将它们分配给不同的变量,这样就可以了

     char a = "hello"
     char b = "world"
     char c = "I"
     unsigned long d = 287876
     float e = 6.0

我知道常规 scanf 在到达空白时会停止从 stdin 读取。所以我一直在想,可能有一种方法可以让 sscanf 在到达“,”(逗号)时停止阅读

我一直在探索图书馆以找到 sscanf 只读字母和数字的格式。我找不到这样的东西,也许我应该再看一次。

有什么帮助吗?提前致谢 :)

4

4 回答 4

18

如果字符串中变量的顺序是固定的,我的意思是它总是:

string, string, string, int, float

在中使用以下格式说明符sscanf()

int len = strlen(str);
char a[len];
char b[len];
char c[len];
unsigned long d;
float e;

sscanf(" %[^,] , %[^,] , %[^,] , %lu , %lf", a, b, c, &d, &e);
于 2013-04-15T12:29:52.753 回答
1

此示例使用strtok应该会有所帮助:

#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="hello, world, I, 287876, 6.0" ;
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str,",");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, ",");
  }
  return 0;
}
于 2013-04-15T12:20:30.620 回答
-1

假设文本文件的格式是不变的,您可以使用以下解决方案。

std::ifstream ifs("datacar.txt");
    if(ifs)
    {
       std::string line;
       while(std::getline(ifs,line))
       {
            /* optional to check number of items in a line*/
            std::vector<std::string> row;
            std::istringstream iss(line);
            std::copy(
                std::istream_iterator<std::string>(iss),
                std::istream_iterator<std::string>(),
                std::back_inserter(row)
            );

            /*To avoid parsing the first line and avoid any error in text file */
            if(row.size()<=2)
                continue;


            std::string format = "%s %s %s %f %[^,] %d";
            char year[line.size()],make[line.size()],three[line.size()],full[line.size()];
            float numberf;
            int numberi;  

            std::sscanf(line.c_str(),format.c_str(),&year,&make,&three,&numberf,&full,&numberi);

        /* create your object and parse the next line*/


        }

    }
于 2019-08-02T21:04:12.267 回答
-2

请参阅strtok和/或的文档strtok_r

于 2013-04-15T12:17:36.957 回答