【问题标题】:How to copy data starting from end of the array in C/C++如何在 C/C++ 中从数组末尾开始复制数据
【发布时间】:2012-09-25 18:30:14
【问题描述】:

我有一个函数void copy(char *temp,char input[length])。我需要做的是将 temp 的值复制到输入数组中,但从输入数组的末尾开始。

我没有正确地提出问题。 这就是我想要做的。

我输入了长度为 20 的数组。我得到了一个值为“test”的临时数组。然后我想在 input[19]=t,input[18]=e 等的输入数组中复制 temp。

现在当我再次调用该函数时,如果我想将 xyz 复制到输入数组,那么 input[15]=x,input[14]=y,input[13]=z。

我想这样做,直到我用所有值填充输入数组。

void copy(char *temp,char input[])

这是函数定义。

现在让我们看看我们必须做什么,

char* temp={"abcde"};
char input[100]={};
//I want to move data from temp into input array such that
printf("%c",input[95]); // gives output as a
printf("%c",input[96]); // gives output as b

这是我到目前为止写的。

char* copy(char* ptr,char data[])
{
int start=sizeof(data)/sizeof(char)-strlen(data);
int end=start-strlen(ptr);
int j=0;
int counter=0;

for(counter=start;counter>end;counter--)
{
    data[counter]=ptr[j++];   
}        
printf("%s",data);
return data;


}

当我调用这个函数时,我会以这种方式得到另一个错误,

char data[100]={};
char* temp={"abcde"};
char* output=copy(temp,data);
data=output;

对于 data=output 行,将“char*”分配给“char [100]”时的类型不兼容

【问题讨论】:

  • What have you tried? 特别是,您需要一个额外的参数,以便您知道数组的长度是多少。或者如果数组包含一个以 NULL 结尾的字符串,您可以使用 strlen() 来获取 c 字符串的长度。
  • 不,这不是家庭作业。我正在尝试从数组末尾开始存储一个临时变量并将数据复制到临时数组的长度
  • 从头开始的意思是说temp的内容在input反转
  • 定义一个合适的函数接口,然后添加一个带有输入和输出的用例(代码)。
  • @DavidRodríguez-dribeas 进行了更多更改,希望对您有所帮助

标签: c++ pointers


【解决方案1】:

这已经作为算法实现了:

std::reverse_copy( input, input+length, output );

在相关注释中,您的函数的签名:

void copy(char *temp,char input[length])

其实意思是:

void copy(char *temp,char *input)

input数组的长度不是函数签名的一部分,编译器不会对其进行检查。考虑将大小作为额外参数传递,或者通过引用传递数组。另外源数组没有被修改,所以它应该是const char*

【讨论】:

  • 解释了我想要做什么。
【解决方案2】:

如果是字符串,可以使用strlen检查输入字符串的大小,然后反向复制。另一方面,如果它是一个不以'\0' 结尾的字符数组,则必须为长度取一个新参数。

第一种情况(你说copy the values of temp into input array,所以我们将temp的内容复制到input,忽略它的名字):

void copy(char *temp, char input[length])
{
    for(int i = strlen(temp) - 1; i >= 0; i--)
    {
        input[i] = temp[i];
    }
}

第二种情况:

void copy(char *temp, char *input, size_t length)
{
    for(int i = length - 1; i >= 0; i--)
    {
        input[i] = temp[i];
    }
}

否则你可以使用标准库函数reverse_copy

【讨论】:

  • 我会假设 input 是数据的来源,而 temp 是目的地。如果没有其他原因只是因为它被称为 input.
  • 是的,我就是这么想的,但我只是按照他写的去做。反正他只好再改个名字……
猜你喜欢
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
相关资源
最近更新 更多