入力コードにいくつかの構造定義があります。例えば:
struct node {
int val;
struct node *next;
};
また
typedef struct {
int numer;
int denom;
} Rational;
次の行を使用して、それらを 1 行に変換し、2 回コピーしました。
sed '/struct[^(){]*{/{:l N;s/\n//;/}[^}]*;/!t l;s/ */ /g;p;p}'
結果は次のとおりです。
struct node { int val; struct node *next;};
struct node { int val; struct node *next;};
struct node { int val; struct node *next;};
typedef struct { int numer; int denom;} Rational;
typedef struct { int numer; int denom;} Rational;
typedef struct { int numer; int denom;} Rational;
これは私が欲しいものです:
- 最初の行を元の構造ブロックに戻してほしい
2 行目を次のような関数見出しに変更したいと思います...
void init_structName( structName *var, int data1, int data2 )
-structName は基本的に構造体の名前です。
-var は任意の名前です。
-data1、data2.... は、構造体にある値です。
3.3行目を関数本体に変えてほしい。データパラメータを初期化する場所。このようになります。
{
var->data1 = data1;
var->data2 = data2;
}
入力ファイル内のすべての構造体定義が 1 行に配置され、3 回コピーされることに注意してください。したがって、コードが構造定義を見つけると、その下にさらに 2 つのコピーがあると想定できます。
たとえば、入力ファイルに上記の繰り返し行がある場合、これが必要な出力です。
struct node {
int val;
struct node *next;
};
void init_node(struct node *var, int val, struct node *next)
{
var->val = val;
var->next = next;
}
typedef struct {
int numer;
int denom;
} Rational;
void init_Rational( Rational *var, int numer, int denom )
{
var->numer = numer;
var->denom = denom;
}
誰かが興味を持った場合に備えて。これらの関数は、構造体変数を初期化するためにメイン関数から呼び出されます。
誰か助けてくれませんか?これは大変なことだと思います。本当にありがとう!!