将每个单词替换为C中给定文本中的另一个单词

时间:2015-12-09 11:39:34

标签: c arrays string

我必须在给定的文本(**字符串)中创建一个函数,用另一个单词(y)替换每个单词(x)。我可以直接在给定的文本中替换它们吗?或者我应该制作一个新阵列并在那里进行替换?但是不知道如何继续。 我写的代码是:

void operation_2(char x[100], char y[100], char **string, int N)
{
    int len = 0;
    char *word;
    char s[12] = " .,?!\"';:";
    char **newstring = (char **)malloc(N * sizeof(char *));

    for (i = 0; i<= N; i++) {
            word = strtok(string[i], s);
            while (word != NULL) {
                    if (strcmp(word, x) == 0) {
                            len = strlen(string[i]) - strlen(x) + strlen(y);
                            newstring[i] = (char *)malloc((len + 1) * sizeof(char));

1 个答案:

答案 0 :(得分:1)

如果你创建一个新字符串,它将能够将任何字符串(字符串文字,堆栈上的数组,静态数组,堆上的数组)作为输入,但它不会作为内存高效。

如果您希望获得最大的内存效率,那么您可以就地修改目标字符串,但是根据输入字符串的存储位置,您将受到限制。

  • 字符串文字或可能是一个const静态数组:你无法做任何事情
  • 堆栈或静态:你可以缩小它
  • 堆:你可以realloc它(收缩它或扩展它)

如果您决定修改字符串,memmove函数可能会派上用场。

但请记住:

  1. 在C中没有数组参数这样的东西。它们总是衰减到指针。
  2. strtok将修改它的输入,因此如果您决定使用strtok
  3. ,则需要制作至少一份副本