gpt4 book ai didi

c - 使用指针和 strtok()

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:37 24 4
gpt4 key购买 nike

我正在构建一个链表,需要你的帮助,因为我是 C 语言的新手。我需要输入一个如下所示的字符串:(word)_#_(year)_#_(DEFINITION(UPPER CASE))

例:输入一个字符串输入:invest_#_1945_#_TRADE

基本上,我希望构建一个函数来扫描 DEFINITION 并返回与它相关的词。输入要在字典中搜索的词输入:贸易输出:在“投资”一词中找到“TREADE”

到目前为止,我设法使用 strtok() 函数,但现在我不确定如何打印第一个单词。

这是我能想到的:

  char split(char words[99],char *p)
{

p=strtok(words, "_#_");
while (p!=NULL)
{
printf("%s\n",p);
p = strtok(NULL, "_#_");
}
return 0;

}


int main()
{
char hello[99];
char *s = NULL;

printf("Enter a string you want to split\n");
scanf("%s", hello);
split(hello,s);
return 0;
}

关于我应该做什么的任何想法?

最佳答案

我认为你的问题是如何从格式化字符串中提取三位信息。

strtok 函数并不像您想象的那样工作:第二个参数不是文字定界字符串,而是用作一组字符的定界符的字符串。

在你的情况下,sscanf 似乎是更好的选择:

#include <stdlib.h>
#include <stdio.h>

int main()
{
const char *line = "invest_#_1945 _#_TRADE ";

char word[40];
int year;
char def[40];
int n;

n = sscanf(line, "%40[^_]_#_%d_#_%40s", word, &year, def);

if (n == 3) {
printf("word: %s\n", word);
printf("year: %d\n", year);
printf("def'n: %s\n", def);
} else {
printf("Unrecognized line.\n");
}

return 0;
}

sscanf 函数根据给定的模式检查给定的字符串。大致上,该模式由以百分号开头的格式说明符、表示任意数量的空白字符(包括无)的空格和必须匹配 varbatim 的其他字符组成。格式说明符产生一个必须存储的结果。因此,对于每个说明符,必须在格式字符串之后给出一个结果变量。

在这种情况下,有几个 block :

%40[^_] 将最多 40 个不是下划线的字符读入 char 数组。这是读取字符串的特殊情况。 sscanf 中的字符串实际上是单词,可能不包含空格。然而,下划线将是字符串的一部分,因此为了不占用第一个定界符的下划线,您必须使用符号 [^(chars)],这意味着:任何不包含给定字符的字符序列。 (此处插入符号表示否定,[(chars)] 表示给定字符的任何序列。)

_#_ 从字面上匹配第一个定界符,即仅当下一个字符是下划线哈希标记、下划线时。

%d 将十进制数读入整数。请注意,此处必须使用 & 给出整数的地址。

_#_ 匹配第二个分隔符。

%40s 将最多 40 个非空白字符的字符串读入 char 数组。

该函数返回匹配结果的数量,如果该行有效则应为三个。函数 sscanf 可能很麻烦,但它可能是您快速输入的最佳选择。

关于c - 使用指针和 strtok(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20868252/

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