鱼C论坛

 找回密码
 立即注册
查看: 591|回复: 2

[已解决]字符串替换

[复制链接]
发表于 2023-12-13 20:34:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

C语言使用指针操作,完成字符串替换怎么写呢?
如把 hello world 中的hello 替换为nihao
最佳答案
2023-12-13 20:44:10
在C语言中,可以使用指针来编写一个字符串替换函数。以下是一个可能的实现:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. char* str_replace(char *target, const char *needle, const char *replacement) {
  5.     char buffer[1024] = { 0 };
  6.     char *insert_point = &buffer[0];
  7.     const char *tmp = target;
  8.     size_t needle_len = strlen(needle);
  9.     size_t repl_len = strlen(replacement);

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

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

  17.         memcpy(insert_point, tmp, p - tmp);
  18.         insert_point += p - tmp;

  19.         memcpy(insert_point, replacement, repl_len);
  20.         insert_point += repl_len;

  21.         tmp = p + needle_len;
  22.     }

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

  26.     return res;
  27. }

  28. int main() {
  29.     char str[] = "Hello World";
  30.     char *result = str_replace(str, "Hello", "Nihao");
  31.     printf("%s\n", result);
  32.     free(result);
  33.     return 0;
  34. }
复制代码


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

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

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

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-13 20:34:32 | 显示全部楼层
要使用指针操作完成字符串替换,可以通过遍历字符串,并使用条件语句来判断并替换指定的字符。下面是一个示例代码,将一个字符串中的所有字符"a"替换为"b":
  1. #include <stdio.h>
  2. void replaceString(char *str, char find, char replace) {
  3.     while (*str != '\0') {
  4.         if (*str == find) {
  5.             *str = replace;
  6.         }
  7.         str++;
  8.     }
  9. }
  10. int main() {
  11.     char str[] = "Hello, world!";
  12.     char find = 'o';
  13.     char replace = 'x';
  14.     replaceString(str, find, replace);
  15.     printf("%s\n", str);
  16.     return 0;
  17. }
复制代码

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 2

使用道具 举报

发表于 2023-12-13 20:44:10 | 显示全部楼层    本楼为最佳答案   
在C语言中,可以使用指针来编写一个字符串替换函数。以下是一个可能的实现:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. char* str_replace(char *target, const char *needle, const char *replacement) {
  5.     char buffer[1024] = { 0 };
  6.     char *insert_point = &buffer[0];
  7.     const char *tmp = target;
  8.     size_t needle_len = strlen(needle);
  9.     size_t repl_len = strlen(replacement);

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

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

  17.         memcpy(insert_point, tmp, p - tmp);
  18.         insert_point += p - tmp;

  19.         memcpy(insert_point, replacement, repl_len);
  20.         insert_point += repl_len;

  21.         tmp = p + needle_len;
  22.     }

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

  26.     return res;
  27. }

  28. int main() {
  29.     char str[] = "Hello World";
  30.     char *result = str_replace(str, "Hello", "Nihao");
  31.     printf("%s\n", result);
  32.     free(result);
  33.     return 0;
  34. }
复制代码


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

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

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

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-9 03:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表