很久沒有用c編碼了,我有點麻煩。
我從格式如下的檔案中獲取 tex:
# 3 10
P1 16 3
P2 8 1
P3 10 2
從第二行開始,每一行都代表一個行程,其屬性除以空間,我需要獲取每個屬性并將它們放入一個像這樣的結構陣列中
typedef struct process
{
char *name;
int priority;
int duration;
};
代表程序,有什么提示嗎?
我嘗試使用strtokwith\n作為分隔符來隔離行,然后在第一個的 while 內使用strtokwith作為分隔符,但顯然不起作用。" "strtok
uj5u.com熱心網友回復:
正如評論部分已經指出的那樣,嵌套 ofstrtok是不允許的,但您可以使用該函式fgets獲取各個行,然后使用strtok標記這些行的內容。
如果您只想使用strtok和不使用 來解決問題fgets,那么這也是可能的。
在 POSIX(例如 Linux)系統上,您可以簡單地使用strtok_r而不是strtok,它允許嵌套。
在非 POSIX 上,由于不允許嵌套,您首先必須執行一系列strtok呼叫以獲取指向各行開頭的指標,并且您必須記住所有這些指標。完成第一個strtok呼叫序列后,您可以使用strtok標記各個行的內容:
以下是此類非 POSIX 解決方案的示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINES 100
int main( void )
{
char input[] =
"# 3 10\n"
"P1 16 3\n"
"P2 8 1\n"
"P3 10 2\n";
char *lines[MAX_LINES];
int num_lines;
char *p;
//perform the first sequence of strtok
p = strtok( input, "\n" );
for ( num_lines = 0; p != NULL; num_lines )
{
if ( num_lines == MAX_LINES )
{
fprintf( stderr, "Too many lines!\n" );
exit( EXIT_FAILURE );
}
//remember line
lines[num_lines] = p;
p = strtok( NULL, "\n" );
}
//perform additional sequence of strtok for every line
for ( int i = 0; i < num_lines; i )
{
p = strtok( lines[i], " " );
printf( "Line %d:\n", i 1 );
for ( int j = 0; p != NULL ; j )
{
printf( "Token #%d: %s\n", j 1, p );
p = strtok( NULL, " " );
}
printf( "\n" );
}
}
該程式具有以下輸出:
Line 1:
Token #1: #
Token #2: 3
Token #3: 10
Line 2:
Token #1: P1
Token #2: 16
Token #3: 3
Line 3:
Token #1: P2
Token #2: 8
Token #3: 1
Line 4:
Token #1: P3
Token #2: 10
Token #3: 2
如何將單個令牌寫入 astruct process是一個完全不同的問題。
為了將單個標記的字串轉換為數字,您可以使用函式strtol. 之后,您可以將這些號碼寫給各個struct成員。
如果您的平臺已經支持,您可以使用該功能給name會員寫信。否則,您將必須有足夠的空間來復制字串,然后使用. 您也可以直接在輸入緩沖區內指出,如果該輸入緩沖區不用于其他用途,并且該緩沖區的生命周期保證至少與物件的生命周期一樣長。在這種情況下,不需要復制字串。struct processstrdupmallocstrcpynamestruct process
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/467311.html
上一篇:未能洗掉資料框中字串中的所有$
