gpt4 book ai didi

c - 我如何从字符数组中拆分字符串

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:10 25 4
gpt4 key购买 nike

这里我有一个字符数组,其中有一些拆分器。

字符数组为char sentence []="abc_12.22.32.42";

我想使用 sscanf 从句子中读取 abc,12,22,32,42。

我尝试使用 sscanf,但给出了不同的输出。

我在这里发布了两个代码,其中一个工作正常。

如果我用 %s = %s 读取 abc = 12 那么它的工作原理。为什么我们必须在拆分器之间留出空间。

实现这个目标的任何方式。

不工作代码:

#include <stdio.h>

int main ()
{
char sentence []="abc_12.22.32.42";
char str [20];
char str1 [20];
char str2 [20];
char str3 [20];
sscanf (sentence,"%s_%s.%s.%s.%s",str,str1,str2,str3);
printf ("%s --> %s --> %s --> %s --> %s\n",str,str1,str2,str3);
return 0;
}

输出:

abc_12.22.32.42-->  -- � -->�Tl�s --> (null)

预期输出:

 abc --> 12 --> 22 --> 32 --> 42

工作代码:

/* sscanf example */
#include <stdio.h>

int main ()
{
char sentence []="abc = 12";
char str [20];
char str1 [20];
char str2 [20];
char str3 [20];
if(sscanf(sentence,"%s = %s",str,str1) < 5) ;
printf ("%s--> %s\n",str,str1);
return 0;
}

输出:

abc--> 12

最佳答案

当指定这样的格式时:%s_%s.%s.%s.%s,您的程序无法知道第一个字符串不能包含字符 '_' '.'。这就是为什么 sscanf(sentence,"%s_%s.%s.%s.%s", str0, str1, str2, str3, str4); 导致整个句子存储在 str0

如果您想继续使用 sscanf,则必须更改您期望的格式:

char sentence[] = "abc_12.22.32.42";
char str0[20], str1[20], str2[20], str3[20], str4[20];
sscanf (sentence,"%19[^_]_%19[^.].%19[^.].%19[^.].%19[^.]",
str0, str1, str2, str3, str4);
printf ("%s --> %s --> %s --> %s --> %s\n",
str0, str1, str2, str3, str4);

%19[^_] 导致 str0 最多包含 19 个字符(20 个带有 '\0')并阻止字符 '_' 成为 str0 的一部分。因此,输出根据需要变为 abc --> 12 --> 22 --> 32 --> 42

或者,您可以使用 strtok

关于c - 我如何从字符数组中拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10927051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com