【问题标题】:Strtok in reading a string from a text fileStrtok 从文本文件中读取字符串
【发布时间】:2018-02-09 02:17:04
【问题描述】:

我一直在尝试使用 strtok 对表中的字符串进行标记,但它不起作用。

文本文件中的表格采用这种格式(仅作为示例),以制表符分隔

Jane Doe     iPhone 6     nj-34-k4-3j-jk

我想获得第三个元素,但它不起作用。 这就是函数的样子

scanf("%s", filename);

fp2 = fopen(filename,"r");

if (fp2 == NULL){                                               
    printf("Error reading File \n");
    exit(1);                                                    
}

//while reading a line, keep getting tokens (a line)
while ( fgets ( str, sizeof(str), fp2 ) != NULL )               
{ 
    token = strtok(str,"    ");
    token = strtok(NULL,"   ");
    token = strtok(NULL,"   ");

    if(index>0){                                                
        strupr(token);                                          
        strcpy(address[index-1], token); //store in array                   
    }       

    index++;                                                    
}

【问题讨论】:

  • 您是指真正的制表符 ('\t') 还是一些空格 (' ') 以通过“制表符”对齐?
  • @MikeCAT 是的真实标签('\t')
  • strtok() 的第二个参数应该有一个\t(制表符)作为字符之一。它可能也有也可能没有换行符\n
  • @JonathanLeffler 尝试过,但程序停止工作
  • 您还没有展示addressindex 是如何定义和初始化的。您没有检查来自strtok() 的回报;您没有显示在strtok() 破坏它之前读取的行或strtok() 返回的内容。该代码不是 MCVE (minimal reproducible example)。很难猜测出了什么问题。

标签: c


【解决方案1】:

使用制表符将其按制表符拆分。

token = strtok(str,"\t");
token = strtok(NULL,"\t");
token = strtok(NULL,"\t");

【讨论】:

  • 只有第一行有效,获取第一个元素。如果我添加 'token = strtok(NULL,"\t");令牌 = strtok(NULL,"\t");'程序将停止工作。
  • @chelsey The code should work。请给我们MCVE
  • 如果你有空格和制表符,那么const char *delim = " \t"; strtok(str, delim);strtok(NULL, delim);...
  • @MikeCAT 非常感谢您的努力,刚刚修复它并且 strtok(NULL,"\t") 也有效! :)
  • @Pablo 非常感谢您提到这一点,我检查了文本文件,发现它与空格混合。再次感谢!
猜你喜欢
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 2016-07-01
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多