我想编写一个称为“ substitution”的函数作为参数传递:
该函数会在链接列表上一次扫描每个字符,并在“ vec”上写入链接列表中与通过参数传递的字符CH不同的字符,但是当它扫描链接上的确切CH字符时列表,它在字符串“ CHG”上写在“ vec”上。
以下是我的教科书给出的解决方案。我似乎了解整个程序,但是当函数扫描字符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;
}
答案 0 :(得分:1)
svec->v[cur]='\0'; strcat(svec->v,CHG);
此命令将svec-> v char *上[cur]位置的char替换为终止的空字节,以便在其上使用strcat。
来自 man strcat:
strcat()函数将src字符串附加到dest字符串,覆盖终止符 dest末尾为空字节('\ 0'),然后添加一个终止的空字节。
如果strcat的“ dest char *”缺少终止空字节,则strcat的行为是不可预测的。它是一种安全性。
svec->v[cur]=l->lchar;
之所以这样写是因为“ svec”和“ l”是指针,因此,您需要引用它们才能访问它们的数据。
希望有帮助!