【问题标题】:How to retrieve value between tokens如何在令牌之间检索值
【发布时间】:2020-12-02 10:25:27
【问题描述】:

我有一个关于令牌的问题。我创建了这个程序,它根据标记“[]”分割一个句子。但是,是否有可能检索它之间的字符?例如,我想从输入 [5000] 中检索数字 5000,其中“[ ]”是障碍标记,因此我可以稍后将该数字分配给变量。这是我的代码:

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

int main () {
   char str[ ] = "My balance is [5000]";
   const char s[ ] = "[]";
   char *token;

   
   token = strtok(str, s);

  
   while( token != NULL ) {
      printf( " %s\n", token );

      token = strtok(NULL, s);
   }

   return(0);
}

编辑:基本上我想知道如何将“[]”中的值分配给变量。假设我正在使用 fgets 提示用户键入整个句子,并将其余额放在括号 [] 中。如何创建一个程序来检索括号中的值并将其分配给一个值?

【问题讨论】:

  • 代码在第二行输出5000。您正在提取字符串5000
  • 你得到了什么结果?您在输出中看到5000 了吗?有了这个结果,你还需要知道什么?只需将该结果保存到变量中即可。
  • "[]" 不是 "barrier token",但字符串将被拆分为由字符 [] 分隔的标记。第一个令牌是"My balance is ",第二个令牌是"5000"(您要检索的内容)。
  • @kaylum 怎么样?它在技术上将整个句子分成 3 个部分。就像我改用 fgets 函数一样,它怎么知道将哪个分配给变量?
  • @Jabberwocky 不是“屏障令牌”,明白了!但是如何将“[]”中的值具体分配给变量?假设我要使用 fgets,其中用户键入整个句子并将数字括起来,我如何对其进行编程以专门检索该数字?

标签: arrays c string token


【解决方案1】:

考虑使用strchr 来查找[。如果未找到,则返回 NULL 或指向 [ 的指针。
strcspn 可用于定位 ]。然后strncpy 提取分隔符之间的字符串。
strtol 也可用于解析数字。它可以提供一个指向尾随字符的指针,在本例中为]

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

int main ( void) {
    char str[ ] = "My balance is [5000]";
    char out[sizeof str] = "";
    const char s[ ] = "[]";
    char *token;
    char *last;

    if ( ( token = strchr ( str, s[0]))) {//find [
        ++token;//advance to next character past [
        int count = strcspn ( token, &s[1]);//count characters to ]
        if ( token[count]) {//not the terminating zero
            strncpy ( out, token, sizeof out);
            out[count] = 0;
            //printf ( "%.*s\n", count, token);
            printf ( "out %s\n", out);
        }
        else {
            printf ( "could not find %c\n", s[1]);
        }

        long number = strtol ( token, &last, 10);
        if ( last == token) {
            printf ( "could not parse a number\n");
        }
        else if ( *last != s[1]) {
            printf ( "missing/misplaced delimiter\n");
        }
        else printf ( "number %ld\n", number);
    }
    else {
        printf ( "could not find %c\n", s[0]);
    }

    return 0;
}

【讨论】:

  • 哦,哇,非常感谢!在改进我的代码之前,我会花一些时间来理解你的代码。再次感谢:)
猜你喜欢
  • 2015-09-08
  • 2019-06-22
  • 2020-04-02
  • 1970-01-01
  • 2020-10-12
  • 2017-01-09
  • 1970-01-01
  • 2019-05-23
  • 2017-04-22
相关资源
最近更新 更多