在C语言中将字符插入字符数组(字符串)

3

我有一个字符数组"anana",我想在这个字符数组的开头插入一个"B",使它变成"Banana",但是我无法构建一个简单的while循环来插入B并将每个字母向右移动一步。


1
将其复制到另一个数组中。 - Eugene Sh.
你可以使用临时数组吗?还是必须在原始数组中实现in-place算法? - Some programmer dude
哇,我简直不敢相信我之前没有想到过那个!谢谢。 - J. Doe
我将复制它到另一个数组,然后对每个字母进行相同的操作,但向右移动一步。 - J. Doe
如果你被困在原地,可以通过从右到左复制(或者使用memmove()函数)来将“anana”移动。 - Lee Daniel Crocker
展示你的代码! - abelenky
3个回答

6
假设:

假设:

char array[7] = "anana";

然后:

memmove(array+1, array, 6);
array[0] = 'B';

memmove函数专门用于涉及重叠数据的情况。


1
你可以使用更传统的方法,使用...
#include <stdio.h>

int main()
{
  char s[] = "ananas";
  char b[7] = "B";

  for(int i = 0; i < 7; ) {
    char temp = s[i++];
    b[i] = temp;
  }

  printf("%s", b);    

  return 0;
}

为什么我不能从字符串的末尾开始循环,使最后一个字符取代前一个字符的值,而避免使用另一个数组。我尝试过了,但更改不会反映出来。请花点时间查看我的代码 - Rishav
由于内存必须是连续的,所以在C中无法动态调整数组大小。这就是上面答案中使用两个数组的原因。至于你的代码,我建议你在SO上提出具体问题。 - Eat at Joes
好的,如果我不关心最后一个字符,只想将剩余的字符向右移动并在开头添加一个新字符。那么我可以这样做吗?因为我没有改变数组的大小,只是修改了数组的内容。 - Rishav

0
请按照以下步骤进行:
  1. 创建一个大小为7的新数组(香蕉 + 终止符)。您可以通过使用 strlen() 查找输入字符串的大小来动态执行此操作。
  2. 将您想要的字符放置在 newArray[0] 上,例如 'B'。
  3. 循环遍历 i=1 -> 7
  4. 将值复制为 newArray[i] = oldArray[i-1];

不要忘记终止字符!字符串“Banana”包括它在内共有七个字符。 - Some programmer dude

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接