我需要反转大型数组,使第一个元素成为最后一个,最后一个元素成为第一个元素.
到目前为止,我通过创建此数组的副本,然后向后迭代原始数据并写入副本来完成此操作.之后,将副本写回原始版本.
通过同时访问第一个和最后一个元素,将其中一个存储在temp var中并交换值,是否可以在一个循环中安全地执行此操作?
运行一个非常简单的代码示例
#include <stdlib.h>
#include <iostream>
char* last_char(char* s){
char* last = s;
while (*last) ++last;
return last;
}
char* in_place_reverse(char* s) {
char* left = s;
char* right = last_char(s);
char temp;
while( left < right ) {
temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
return s;
}
int main(){
char * s = "letters\n";
std::cout << in_place_reverse(s);
}
Run Code Online (Sandbox Code Playgroud)
我一直都有
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
但是从我的角度来看,我在代码中没有做任何违法的事情.请帮我确定是什么问题.
PS我编译
g++ example.c
Run Code Online (Sandbox Code Playgroud) string binary = "12345";
string binary2 = "";
size = binary.size() - 1;
for (i = size; i >= 0; i--)
{
binary2[size - i] = binary[i];
}
cout << binary2;
Run Code Online (Sandbox Code Playgroud)
我在运行时不断收到下标错误.但是,我不知道问题是什么.如果可能的话,我将不胜感激.
我刚开始用c ++编写代码.
我写了一个反向字符串的代码.我得到空结果.
void main ()
{
string str1="abcde";string rev="";
int n=str1.size();
for(int i=n-1;i>=0;i--)
{
rev += str1[i];
}
printf("%s \n", rev);
}
Run Code Online (Sandbox Code Playgroud)
有谁能告诉我.
我正在尝试做回文检查。因此,为了解决这个问题,我想将原始字符串与反向字符串进行比较。但是,如何在不覆盖旧字符串的情况下保存反向字符串?
reverse(myString.begin(), myString.end())将反转我的字符串,但它将替换myString,并且这样做string reversedString = reverse(myString.begin(), myString.end());不起作用。这是我到目前为止的内容:
int main()
{
cout << "Enter a string: ";
string myString;
getline(cin, myString);
cout << endl;
string reversedString = reverse(myString.begin(), myString.end());
cout << reversedString;
return 0;
}
Run Code Online (Sandbox Code Playgroud)