2013-05-15 160 views
-1

我有以下代码:忽略逗号串

char dump[50]; 
char genre[50]; 
char line[300] = "Can't Help Falling in Love, Michael Buble, Pop"; 
sscanf(line, "%s %s %s", dump, dump, genre); 

的字符数组“行”将改变每个程序与names, artist和不同的歌曲的genre运行时间。我怎样才能使所有的一切都取决于逗号一个字符串,以便当sscanf运行时,数组"genre"保留单词"Pop"?现在它显然是"Falling",因为它是第三个词。

感谢

+0

为什么字符串中不搜索的位置“”并使用该子字符串操作? – Patashu

+0

我对C很陌生,所以我不确定那是干什么的,但我会去检查一下。谢谢:) – codedude

回答

3
char genre[50]; 
    char line[300] = "Can't Help Falling in Love, Michael Buble, Pop"; 
    sscanf(line, "%*[^,], %*[^,], %s", genre); 
    printf("%s", genre);//display genre 

名称和艺术家需要

char name[50]; 
    char artist[50]; 
    char genre[50]; 
    char line[300] = "Can't Help Falling in Love, Michael Buble, Pop"; 
    sscanf(line, "%[^,], %[^,], %s", name, artist, genre); 
    printf("name: %s\n", name); 
    printf("artist: %s\n", artist); 
    printf("genre: %s\n", genre); 
+0

介意解释*做什么? – codedude

+0

@codedude忽略“*”的含义。 – BLUEPIXY

+0

这似乎不起作用。我没有得到任何输出到终端。 – codedude

2

我觉得strtok是你在找什么。查看描述和示例代码的链接。

从这几行字,你可以看到它是如何工作的:

char line[300] = "Can't Help Falling in Love, Michael Buble, Pop"; 
dump = strtok(line,","); 
dump = strtok(NULL,","); 
genre = strtok(NULL,","); 

有可能是一首歌的标题中包含逗号的机会。在这种情况下,您应该修改链接页面上的while循环。有了这个,你可以很容易地找到最后一个逗号后面的子串。

+0

好的。我回顾了这个问题,但我很难理解我会如何将它应用于这种情况。有什么机会可以给我一些指点? – codedude

+0

小心'strtok'。它修改了它所操作的字符串,所以你可能需要制作一个独立的副本 - 而且你不能直接在字符串上操作它。 –

+0

那么在实际的程序中,我从文本文件中抓取字符串,所以不应该成为问题。 – codedude