gpt4 book ai didi

c++ - 如何移动给定数字索引左侧的数组(或 c 字符串)元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:43 24 4
gpt4 key购买 nike

我正在编写一个函数,将我的 C 字符串的字符向左移动给定数量的字符。目前该功能会将字符向左移动,但我丢失了一个。我知道我的 for 循环存在某种索引问题,但我无法确定。

编辑:左移我的意思是:

给定一个起始的 c 字符串 a, b, c, d如果向左移动一个索引,这个相同的数组将等于 b、c、d、a如果向左移动两个索引,这个相同的 c 字符串将等于 c、d、a、b

到目前为止,这是我的代码:

#include <iostream>
using namespace std;

void shiftleft (char myarray[], int size, int shiftBy)
{

char temp;

for (int i=size-1; i > 0; i--)
{
temp = myarray[size+shiftBy];
myarray[size+shiftBy] = myarray[i];
myarray[i] = temp;
}


}

int main() {
char myarray[20] = "test";
int size = 4;
shiftleft (myarray, size, 1);

for(int i = 0; i < size+1; i++){
cout << myarray[i];
}


return 0;
}

这是我将每个元素向右移动的工作函数,我需要做的就是反转这个循环,并将元素向左移动,如下所示:<----

//function bloack
void shiftright (char myarray[], int size, int shiftBy)
{
if(shiftBy > size){
shiftBy = shiftBy - size;
}
if(size == 1){
//do nothing
}
else{
char temp;
//for loop to print the array with indexes moved up (to the right) --> by 2
for (int i=0; i < size; i++)
{
temp = myarray[size-shiftBy];
myarray[size-shiftBy] = myarray[i];
myarray[i] = temp;
}

}
}

最佳答案

如果你想左移字符串而不旋转,你可以使用这个代码:

void shiftLeft (char *string,int shiftLength)
{

int i,size=strlen(string);
if(shiftLength >= size){
memset(string,'\0',size);
return;
}

for (i=0; i < size-shiftLength; i++){
string[i] = string[i + shiftLength];
string[i + shiftLength] = '\0';
}

}

关于c++ - 如何移动给定数字索引左侧的数组(或 c 字符串)元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26745018/

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