糖粥ttt 发表于 2023-12-13 20:34:14

字符串替换

本帖最后由 糖粥ttt 于 2023-12-13 20:54 编辑

C语言使用指针操作,完成字符串替换怎么写呢?
如把 hello world 中的hello 替换为nihao

FishC 发表于 2023-12-13 20:34:32

要使用指针操作完成字符串替换,可以通过遍历字符串,并使用条件语句来判断并替换指定的字符。下面是一个示例代码,将一个字符串中的所有字符"a"替换为"b":

#include <stdio.h>

void replaceString(char *str, char find, char replace) {
    while (*str != '\0') {
      if (*str == find) {
            *str = replace;
      }
      str++;
    }
}

int main() {
    char str[] = "Hello, world!";
    char find = 'o';
    char replace = 'x';

    replaceString(str, find, replace);
    printf("%s\n", str);

    return 0;
}

在上面的代码中,`replaceString`函数接受指向字符串的指针 `str`,要查找的字符 `find`,以及要替换成的字符 `replace`。通过遍历字符串,当发现字符和要查找的字符相等时,就使用指针操作将其替换为指定的字符。

在主函数中,我们定义了一个字符串 `str`,并调用 `replaceString` 函数进行替换,然后打印替换后的字符串。

注意,在使用指针操作时,要确保字符串是可修改的,即在定义字符串时使用字符数组而不是常量字符串。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2023-12-13 20:44:10

在C语言中,可以使用指针来编写一个字符串替换函数。以下是一个可能的实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* str_replace(char *target, const char *needle, const char *replacement) {
    char buffer = { 0 };
    char *insert_point = &buffer;
    const char *tmp = target;
    size_t needle_len = strlen(needle);
    size_t repl_len = strlen(replacement);

    while (1) {
      const char *p = strstr(tmp, needle);

      // 如果没有找到需要替换的字符串,就复制剩下的字符串
      if (p == NULL) {
            strcpy(insert_point, tmp);
            break;
      }

      memcpy(insert_point, tmp, p - tmp);
      insert_point += p - tmp;

      memcpy(insert_point, replacement, repl_len);
      insert_point += repl_len;

      tmp = p + needle_len;
    }

    // 结果字符串需要重新分配内存
    char *res = malloc(strlen(buffer) + 1);
    strcpy(res, buffer);

    return res;
}

int main() {
    char str[] = "Hello World";
    char *result = str_replace(str, "Hello", "Nihao");
    printf("%s\n", result);
    free(result);
    return 0;
}

这个例子中的`str_replace`函数通过查找目标字符串`needle`在原始字符串`target`中的位置,然后用`replacement`替换它,通过在新的字符缓冲区`buffer`中构造新的字符串来完成替换。然后它返回一个新分配的字符串,该字符串包含替换后的结果。注意这个函数使用了若干标准库的函数,如`strstr`, `strcpy`, `memcpy`,以处理指针和字符串。

这段程序执行后,会将"Hello World"替换为"Nihao World",并将其输出。

需要注意的是,这个实现简单且有点粗糙,并且不处理输入中的特例(例如,输入字符串太长不能存入buffer,或者malloc无法分配内存等)。在实际使用中,你可能需要更健壮的实现,这可能涉及输入验证和错误处理,以及可能的内存管理优化。

求最佳答案{:10_254:}
页: [1]
查看完整版本: 字符串替换