C函数的流程图

C函数的流程图,c,C,这是一个家庭作业。我问的是如何创建逻辑流程图。我一直在努力编写这段代码,所以如果有人能验证我解决它的尝试,那就太好了 问题: 将纵梁1插入纵梁2的“位置”。“pos”后面的字符将移动到string2中的字符后面。不会删除任何字符 计划解决: 计算S1和S2的长度 将字符从s1[pos]复制到s1[pos+LengthOfS2] 是否有某种方法终止此数组 插入内容。。。s1[每次最后一个空位-1]=s2[每次一个长度为2分钟] 终止阵列 这有什么意义吗/ 编辑:我不能使用string.h函数,如s

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

问题:

将纵梁1插入纵梁2的“位置”。“pos”后面的字符将移动到string2中的字符后面。不会删除任何字符

计划解决:

计算S1和S2的长度

将字符从s1[pos]复制到s1[pos+LengthOfS2] 是否有某种方法终止此数组

插入内容。。。s1[每次最后一个空位-1]=s2[每次一个长度为2分钟]

终止阵列

这有什么意义吗/


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

假设要将下面的string2插入string1中的位置f中 string1等于xxfxx string2等于yyyy

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

memcpy(string1, buffer, 0, 2);
memcpy(string2, &buffer[2], 0, 5);
memcpy(&string1[2], &buffer[2+5], 0, 3);
您的任务是将这些硬编码数字替换为动态数字,动态数字是每个字符串长度和字母“f”位置的函数


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

假设您想将下面的string2插入string1中的f位置 string1等于xxfxx string2等于yyyy

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

memcpy(string1, buffer, 0, 2);
memcpy(string2, &buffer[2], 0, 5);
memcpy(&string1[2], &buffer[2+5], 0, 3);
您的任务是将这些硬编码数字替换为动态数字,动态数字是每个字符串长度和字母“f”位置的函数


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

但是“插入”是什么意思?您是如何做到的

关键是要认识到,在string2中插入string1可以分解为将string2的开头复制到pos,将string1附加到该“半副本”上,然后将string2的其余部分附加到该“半副本”上

实现这一点的简单方法是使用缓冲区来存储结果。它必须足够大以存储结果字符串,即至少:string1和string2的长度之和,加上终止NUL的长度。如果太大,没关系,但不能太小


如果您熟悉中可用的字符串操作函数,例如strlen、strncat和strncpy,您应该不会有太多问题。

但是“插入”是什么意思?您是如何做到的

关键是要认识到,在string2中插入string1可以分解为将string2的开头复制到pos,将string1附加到该“半副本”上,然后将string2的其余部分附加到该“半副本”上

实现这一点的简单方法是使用缓冲区来存储结果。它必须足够大以存储结果字符串,即至少:string1和string2的长度之和,加上终止NUL的长度。如果太大,没关系,但不能太小


如果您熟悉中可用的字符串操作函数,例如strlen、strncat和strncpy,您应该不会有太多问题。

学习使用psuedo代码编写,此问题可能类似于:

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
不确定这是否是分配,但修改psuedo代码以正确反映分配,然后编写c代码


请注意,此psuedo代码不是c代码,但可以轻松地转换为c代码。

如果要学习使用psuedo代码编写代码,此问题可能类似于:

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
不确定这是否是分配,但修改psuedo代码以正确反映分配,然后编写c代码


请注意,此psuedo代码不是c代码,但可以轻松地转换为c代码。

这只是一个如何仅使用阵列实现的想法。你将使用什么取决于你自己。学习愉快

  #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;

}  

这只是一个想法,你可以用数组来完成它。你将使用什么取决于你自己。学习愉快

  #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;

}  

很抱歉,我忘了在OP中包括我不能使用strcopy的任何功能。我必须使用变通方法来复制它们的效果。制作一个名为myCpysrc、dest、startIdx的函数,然后简单地使用它:不要忘记前两个参数是指针,后两个是按值传递的。很抱歉,我忘了在OP中包含我不能使用strcopy之类的函数的内容。我必须使用变通方法来复制它们的效果。制作一个名为myCpysrc、dest、startIdx的函数,并简单地使用它:不要忘记前两个参数是指针,后两个是按值传递的。你不能使用任何标准函数吗?你的意思是不能包含stdlib.h或string.h?string函数,或者不能使用任何标准函数?你的意思是不能包含stdlib.h或string.h?字符串函数,对不起