gpt4 book ai didi

c - 字符串中每 3 个字符后插入一个字符

转载 作者:行者123 更新时间:2023-11-30 19:29:49 26 4
gpt4 key购买 nike

每从 str1 复制三个字符到 str2,字符 ch 就会插入到 str2 中。

(Input1) Enter a string:  abc de 
(Input2) Enter a character to be inserted: #
Output: abc# de

代码:

void insertChar(char *str1, char *str2, char ch) 
{
int i, j, count = 0, flag = 0;
char *ptr1, *ptr2, *ptr3;
ptr1 = str1; //Input string
ptr3 = &str2; //char string array output

for (i = 0, j = 0;*ptr1 != '\0'; ptr1++, i++, j++, ptr3++)
{
str2[j] = str1[i];
if (*ptr1 == ' ' && flag != 1)
++count;

if (flag != 1 && count%3)
{
flag = 1;
for(ptr2 = ch;*ptr2 != '\0'; ptr2++)
{
str2[++j] = *ptr2;
ptr3++;
}
str2[++j] = ' ';
ptr3++;
}
}
str2[j] = '\0';
}

但是我的代码无法运行。我可以知道可能是什么问题吗?

最佳答案

正如评论中提到的,代码存在一些问题。

ptr3 = &str2

在这一行中,您没有将字符串分配给 ptr3。相反,您分配的是包含字符串起始地址的指针的地址。例如:假设字符串中的第一个字符位于地址位置 1000。那么,str3 包含值 1000。但是,str3 本身将位于其他位置。假设它位于 2000。那么,ptr3 包含值 2000,递增后,它将指向 2001,依此类推。因此,您会得到错误且危险的值。

for(ptr2 = ch;*ptr2 != '\0'; ptr2++) 行中也存在问题。您正在将 ch 的值分配给 ptr2。这应该给你一个警告。同样,ptr2 指向的内存被更改。因此,*ptr2 尝试取消引用该内存位置。

我为此使用的代码:

void insertChar(char *str1, char *str2, char ch) {
int count = 0;
while (*str1) {
*str2++ = *str1++;
++count;
if (count == 3) {
*str2++ = ch;
count = 0;
}
}
*str2 = '\0';
}

一些建议:

  • 尝试声明变量时尽可能接近其用法。
  • 编译程序时使用-Wall选项

关于c - 字符串中每 3 个字符后插入一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52341362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com