繁体   English   中英

在C中用scanf分割字符串

[英]Splitting strings with scanf in C

我有一个带有#和!的字符串。 整个符号。 我的任务是将这些符号之间的所有内容分成新的字符串。 我不知道会有多少个符号。

我可以使用scanf函数将它们分成字符串吗

我在想这样的事情:

输入字符串:dawddwamars#dawdjiawjd!fjejafi!djiajoa#jdawijd#

字符s1 [20],s2 [20],s3 [20],s4 [20],s5 [20];

scanf函数(“%S [^!] [^#]%S [^!] [^#]%S [^!] [^#]%S [^!] [^#]%S [^!] [ ^#]“,s1,s2,s3,s4,s5);

这行得通吗? 还是有人有更好的方法。 我需要将字符串分成子字符串,因为我必须在这些新字符串中搜索最长的公共子字符串。

首先,这是一些与您从输入字符串(字符串数组)中取出的子字符串数量有关的非灵活代码。 如前所述,请使用strsep() (因为strtok()已被废弃,请参见man strtok )。

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

int main() {
    char* str;
    char* token;
    char* temp;
    char strings[10][20];
    int i = 0;
    str = strdup("dawddwamars#dawdjiawjd!fjejafi!djiajoa#jdawijd#");

    printf("%s\n", str);
    while ((token = strsep(&str, "#")) != NULL) {
        temp = strdup(token);
        while ((token = strsep(&temp, "!")) != NULL) {
            printf("%s\n", token);
            strcpy(strings[i], token);
            i++;
        }
    }
}

scanf()具有许多此处不需要的功能。

为了提高效率,我可能会使用strtok() ,它似乎是完成此任务的理想选择。

另外,我可能只是编写C代码来查找下一个#! 使用strchr()或简单的循环,然后自己提取令牌。

如果必须使用scanf()

#define Fmt1   "%19[^#!]"
#define Sep1   "%*[#!]"
char s1[20], s2[20], s3[20], s4[20], s5[20];
int count = scanf(" " Fmt1 Sep1 Fmt1 Sep1 Fmt1 Sep1 Fmt1 Sep1 Fmt1, 
    s1, s2, s3, s4, s5);
// count represents the number of successfully scanned strings.
// Expected range 0 to 5 and EOF.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM