2

这是一个家庭作业。我问的是创建一个逻辑流程图。我一直在努力编写这段代码,所以如果有人能验证我解决它的尝试,那就太好了。

问题:

将 string1 插入 string2 的位置“pos”。'pos' 后面的字符将移动到 string2 中的字符之后。不会删除任何字符。

计划解决:

计算 S1 和 S2 的长度。

将字符从 s1[pos] 复制到 s1[pos+LengthOfS2] (有什么方法可以终止这个数组吗?)

插入内容... s1[最后一个空点(每次-1)] =s2[LengthofS2(每次减一]

终止数组

这有什么意义吗?:/

编辑:我不能使用 string.h 函数,例如 strcopy 或内存操作。

4

4 回答 4

3

假设您想将下面的 string2 插入到 string1 中的 f 位置 string1 等于“xxfxx” string2 等于“yyyyy”

首先分配一个大缓冲区来保存结果。

memcpy(string1, buffer, 0, 2);
memcpy(string2, &buffer[2], 0, 5);
memcpy(&string1[2], &buffer[2+5], 0, 3);

您的任务是用动态数字替换这些硬编码数字,这些数字是每个字符串长度和字母“f”位置的函数

我希望这也有助于考虑使用 strcpy 或 wstrcpy 而不是 memcpy。如果程序是 MB 而不是 Unicode,那么 memcpy 就足够了。

于 2013-09-03T22:54:30.347 回答
1

这只是一个想法,如何仅使用数组来完成它。您将使用什么取决于您。学习愉快!

  #include <stdio.h>

  int main(int argc, char ** argv ){

  char s1[] = "WWW";
  char s2[] = "HelloEverybody";

  printf("String S1 is: %s\n", s1);
  printf("String S2 is: %s\n", s2);

  int i, j, pos = 3;
  char comb[17];

  for(i = 0; s2[i] != 0; ++i){
  //printf("Char is: %c\n", s2[i]);

  if ( i != pos ) {
     comb[i] = s2[i];
  } else {
     for (j = 0; s1[j] != 0; ++j){
        comb[i+pos+j] = s2[pos+j];
        //printf("Pos + j is: %c\n", s2[pos+j]);
        comb[pos+j] = s1[j];
     }
     i = 2*pos + j;
     //printf("Pos + j =%i\n", i);
     break;
  }

 }

 int t;
 for (t =i; s2[t-pos] !=0; ++t) {
      comb[t] = s2[t-pos];
  }

 printf("Combined string is %s\n", comb);

 return 0;

}  
于 2013-09-04T01:23:44.267 回答
0

但是“插入”是什么意思,你是怎么做的?

关键是要认识到in的插入可以分解为复制up to的开头,附加到“半副本”,然后将其余部分附加到末尾。string1string2string2posstring1string2

执行此操作的简单方法是使用缓冲区来存储结果。它必须足够大以存储结果字符串,即至少: 和 的长度之string1string2,加上终止 NUL 的总和。如果它太大,那没关系,但它不能太小。

如果您熟悉 中可用的字符串操作函数<string.h>,例如strlen()strncat()strncpy(),那么您应该不会有太大问题。

于 2013-09-03T23:17:20.670 回答
0

学习用伪代码编写,这个问题似乎是这样的:

L1 = length of string1
L2 = length of string2
P  = position in string2 where string1 is inserted

perform edit checks to see that P < L2 and L1 > 0 and L2 > 0
// any other checks??

string3 = allocated new storage for a length of L1 + L2;

for (idx = 0 to idx < POS)
   copy char from string2[idx] to string3[idx]

for (idx = POS to idx < POS + L1
   copy char from string1[idx - POS] to string3[idx]


for (idx = POS + L1 to idx < L1 + L2
   copy char from string2[POS - L1] to string3[idx]

print string3 to debug results

不确定这是否是赋值,但修改伪代码以正确反映赋值,然后编写 c 代码。

请注意,这个伪代码不是 c 代码,但它可以很容易地翻译成 C 代码。

于 2013-09-04T01:03:47.773 回答