【发布时间】:2012-07-20 08:23:48
【问题描述】:
我很难理解我应该如何执行以下操作:
我有一个这样定义的单词列表:
typedef struct _StringNode {
char *str;
struct _StringNode* next;
} StringNode;
现在我需要编写一个函数来接收一个字符串和两个相同长度的单词列表,并且我需要用第二个列表中的相应单词替换字符串中第一个列表中出现的每个单词。
例子:
text: "stack overflow siteoverflow oveflow stack"
patterns: [ "stack", "overflow", "site" ]
replacements: [ "Hello", "guys", "here" ]
result: "Hello guys hereguys guys Hello"
对于每个单词:我正在尝试使用strstr(),因此我将获得一个指向字符串副本中出现的单词的指针,然后更改单词,并提升副本的指针文本字符串。
char* replace(const char *text,
const StringNode *patterns,
const StringNode *replacements);
【问题讨论】:
-
每个节点有一个单词,两个列表包含相同数量的节点。我把代码删了,感觉不对。
-
旁注,不要使用以
_开头后跟大写字母的名称。他们是reserved。在 C 中,您可以安全地编写typedef struct StringNode { ... } StringNode; -
我在列表中添加了 Python 风格的语法并引用了字符串,以使其更清晰。
-
您希望替换文本中模式的任何匹配项,还是仅个单词(即被空格包围的匹配项)?
-
如果 [ "a", "a" ] => [ "b", "c" ] 或者更糟糕的是 [ "a", "b" ] => [ " b", "a" ]?