簡體   English   中英

如何在C中標記全行輸入?

[英]how to token a full line input in c?

我需要從cmd解析一條看起來像這樣的行

"SOME WHITE SPACE" "var_name" "SOME WHITE SPACE" "var_value" "SOME WHITE SPACE"

我把整個行與fgets:

fgets(input_buf,MAX_LINE_LENGTH,stdin);

並嘗試像這樣標記化:

sscanf(input_buf,"%s", var_buff);

sscanf(input_buf+strlen(var_buff),"%s", var_val_buff);

sscanf(input_buf+(strlen(var_buff)+strlen(var_val_buff)+2),"%s", rest_line_buff);

if (strlen(rest_line_buff) == 0)

    printf("error in usage\n");

由於空格的數量可能會變化,因此我無法獲得正確的值。 如何標記輸入行?

使用strtok ,如下面的示例程序所示:

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

int main ()
{
  char sampleInput[] ="foo bar foo1 bar1 foo2 bar2";
  char *token;
  char *whiteSpace = " \t\n\f\r\v";
  int isVariable = 1;

  token = strtok(sampleInput, whiteSpace);
  while (token != NULL)
  {
     if (isVariable) 
        printf("Variable = %s\n", token);
     else 
        printf("Value = %s\n\n", token);
     isVariable = isVariable ? 0 : 1;
     token = strtok(NULL, whiteSpace);
  }
  return 0;
}

輸出:

Variable = foo
Value = bar

Variable = foo1
Value = bar1

Variable = foo2
Value = bar2

scanf系列中的所有函數默認都會聚合並跳過多個空格字符:

sscanf(input_buf," %s %s", var_buff, var_val_buf);

我不確定格式字符串中的前導空格是否絕對必要,但是如果輸入行的開頭沒有實際的空格,我肯定這是正確的事件。

使用掃描儀生成器: http : //en.wikipedia.org/wiki/Lexical_analysis#Lexer_generator或下載令牌生成器庫。

在這里使用strtok( )strtok_r( )很自然。 你為什么反對呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM