在C++中旋转数组的最后n个元素
我正在尝试实现一个函数,该函数从当前索引所在的字符串中删除一个字符。下面是到目前为止我所掌握的基本情况。我试图将要删除的字符旋转到字符串的末尾,然后用空终止符替换它。下面的代码似乎并没有实际旋转缓冲区,因为我得到的输出是wor,而不是预期的输出wrd在C++中旋转数组的最后n个元素,c++,arrays,string,C++,Arrays,String,我正在尝试实现一个函数,该函数从当前索引所在的字符串中删除一个字符。下面是到目前为止我所掌握的基本情况。我试图将要删除的字符旋转到字符串的末尾,然后用空终止符替换它。下面的代码似乎并没有实际旋转缓冲区,因为我得到的输出是wor,而不是预期的输出wrd int main() { char buffer[]="word"; int currIndex=2; int endIndex=strlen(buffer); currIndex--; endIndex--
int main() {
char buffer[]="word";
int currIndex=2;
int endIndex=strlen(buffer);
currIndex--;
endIndex--;
rotate(buffer+currIndex,
buffer+1,
buffer+strlen(buffer));
buffer[endIndex]='\0';
cout << buffer << endl;
return 0;
}
使用std::string使事情变得更简单,因为我不必考虑指针:
std::string buffer="word";
rotate(buffer.begin()+1, buffer.begin()+2, buffer.end());
buffer.resize(buffer.size()-1);
或者,我们可以使用c型阵列:
char buffer[]="word";
rotate(buffer+1, buffer+2, buffer+4);
buffer[3] = '\0';
接受3个参数:
template< class ForwardIt >
ForwardIt rotate( ForwardIt first, ForwardIt n_first, ForwardIt last );
实际上非常接近。你刚刚把第二个论点搞错了。应该是的
rotate(buffer+currIndex,
buffer+2,
buffer+strlen(buffer));
buffer[endIndex]='\0';
但是不可否认,用递增和递减编写的代码有点混乱。使用std::string使事情变得更容易,因为我不必考虑指针:
std::string buffer="word";
rotate(buffer.begin()+1, buffer.begin()+2, buffer.end());
buffer.resize(buffer.size()-1);
或者,我们可以使用c型阵列:
char buffer[]="word";
rotate(buffer+1, buffer+2, buffer+4);
buffer[3] = '\0';
接受3个参数:
template< class ForwardIt >
ForwardIt rotate( ForwardIt first, ForwardIt n_first, ForwardIt last );
实际上非常接近。你刚刚把第二个论点搞错了。应该是的
rotate(buffer+currIndex,
buffer+2,
buffer+strlen(buffer));
buffer[endIndex]='\0';
但是不可否认,用递增和递减编写的代码有点混乱。这并不是为了回答所提出的问题,而是为了解决根本问题:从字符串中删除单个字符 解决方案是类成员的简单应用程序:
#include <string>
#include <iostream>
int main() {
std::string word{ "word" };
std::string::size_type currIndex{ 2 };
word.erase( currIndex, 1 );
std::cout << word << std::endl;
}
这并不试图回答所问的问题,而是解决了根本问题:从字符串中删除单个字符 解决方案是类成员的简单应用程序:
#include <string>
#include <iostream>
int main() {
std::string word{ "word" };
std::string::size_type currIndex{ 2 };
word.erase( currIndex, 1 );
std::cout << word << std::endl;
}
你可以使用std::string吗?我不太明白你的解释。假设你想在角色e的abcdef中旋转。预期输出大于efabcd?我说的对吗?@ovanes根据您的输入,我希望从rotate调用中返回abcdfe,然后在将最后一个索引设置为null终止符后得到abcdf的最终输出。请注意,预期的输出是wod,而不是wrd。数组索引为零,C++为基础。你可以使用std::string吗?我不太明白你的解释。假设你想在角色e的abcdef中旋转。预期输出大于efabcd?我说的对吗?@ovanes根据您的输入,我希望从rotate调用中返回abcdfe,然后在将最后一个索引设置为null终止符后得到abcdf的最终输出。请注意,预期的输出是wod,而不是wrd。数组索引为零,C++为基础。我相信整个角色的旋转只是OP提出的解决问题方案的一部分。实际的解决办法是。谢谢!更一般的解决方案是:rotatebuffer+currIndex、buffer+currIndex+1、buffer+strlenbuffer@我觉得:这是一个愚蠢的意义。跳出框框思考的方式!将此作为答案发布后,您将获得meI的肯定支持。meI相信,整个角色轮换只是OP针对其问题提出的解决方案的一部分。实际的解决办法是。谢谢!更一般的解决方案是:rotatebuffer+currIndex、buffer+currIndex+1、buffer+strlenbuffer@我觉得:这是一个愚蠢的意义。跳出框框思考的方式!把它贴出来作为答案,我保证会投你一票