【发布时间】:2019-06-13 16:02:19
【问题描述】:
我想写一个名为“substitution”的函数作为参数传递:
- 一个链表“l”,每个节点都有一个字符(“lchar”)。
- 一串字符“CHG”
- 一个字符“CH”
- 包含最终字符串的“vec”结构。
该函数在某个时间扫描链表上的每个字符,并将链表中与作为参数传递的字符 CH 不同的字符写入“vec”,但是当它扫描链表上的确切 CH 字符时列表,它在“vec”上写入字符串“CHG”。
以下是我教科书给出的解决方案。整个程序我好像看懂了,但是函数扫描字符CH的时候看不懂段落:
svec->v[cur]='\0'; strcat(svec->v,CHG);
它到底是做什么的?为什么我们使用“svec”指针?为什么要写svec->v[cur]=l->lchar;,因为我们处理的是字符串?
解决办法:
struct el {
struct el *next;
char lchar;
};
struct el *l=NULL;
typedef struct {
int size;
char *v;
} vec;
vec svec;
int substitution (struct el *l, char *CHG, char CH, vec *svec) {
\\ initialize svec in the dynamic memory
int cur=0;
while (l!=NULL) {
if (l->lchar !=CH) {
svec->v[cur]=l->lchar;
cur++;
l=l->next;
} else {
svec->v[cur]='\0';
strcat(svec->v,CHG);
cur=cur+strlen(CHG);
l=l->next;
}
}
svec->v[cur]='\0';
return 1;
}
【问题讨论】:
标签: c function pointers linked-list typedef