[英]C++ Reverse Array
在 C++ 中,我需要:
main()
,它显示带有新反转字符的原始数组。我在创建实际执行反转的函数时遇到问题,因为我有一些限制:
我的函数只传入原始数组,即:
void reverse(char word[])
编辑:到目前为止,这是我的代码库:
void reverse(char word[]);
void main()
{
char word[MAX_SIZE];
cout << endl << "Enter a word : ";
cin >> word;
cout << "You entered the word " << word << endl;
reverse(word);
cout << "The word in reverse order is " << word << endl;
}
void reverse(char myword[])
{
int i, temp;
j--;
for(i=0;i<(j/2);i++)
{
temp = myword[i];
myword[i] = myword[j];
myword[j] = temp;
j--;
}
}
尽管看起来很家庭作业,但我可以建议:
void reverse(char word[])
{
int len=strlen(word);
char temp;
for (int i=0;i<len/2;i++)
{
temp=word[i];
word[i]=word[len-i-1];
word[len-i-1]=temp;
}
}
或者更好的是经典的XOR实现:
void reverse(char word[])
{
int len=strlen(word);
for (int i=0;i<len/2;i++)
{
word[i]^=word[len-i-1];
word[len-i-1]^=word[i];
word[i]^=word[len-i-1];
}
}
由于这是家庭作业,因此我将为您提供解决方案,而不仅仅是给您答案。
您的reverse
函数可以修改传入的word
。您需要知道的是单词有多长(这样您就知道要反转多少个字母),您可以从strlen()
函数中获取。 如果不允许使用指针,则可以使用局部int
索引变量。
我可以提供您的问题的解决方案,使用算法深度优先搜索。
#include <iostream>
#include <vector>
void showContentVector(std::vector<int>& input)
{
for(int i=0; i<input.size(); ++i)
{
std::cout<<input[i]<<", ";
}
return;
}
void dfs(int current, int previous, std::vector<int>& input, std::vector<int>& visited)
{
if(visited[current]==1)
{
return;
}
visited[current]=1;
int item=input[current];
for(int next=(current+1); next<input.size(); ++next)
{
if(next==previous)
{
continue;
}
dfs(next, current, input, visited);
}
if(current==input.size()-1)
{
input.clear();
}
input.push_back(item);
return;
}
void solve()
{
const int maximumSize=5;
std::vector<int> values={1, 2, 3, 4, 5};
std::vector<int> visited(maximumSize, 0);
std::cout<<"Before, values <- ";
showContentVector(values);
dfs(0, -1, values, visited);
std::cout<<std::endl<<"After, values <- ";
showContentVector(values);
std::cout<<std::endl;
return;
}
int main()
{
solve();
return 0;
}
结果如下:
Before, values <- 1, 2, 3, 4, 5,
After, values <- 5, 4, 3, 2, 1,
如果我们在说C字符串,那么您的函数应该是
void reverse(char word[],size_t wordlen)
相同问题的第一个答案(这是从C中的反向句子造句? )
这并不能满足您的需求,但可以使您更加亲密!
int ReverseString(char *rev)
{
if(*rev!='\0')
{
ReverseString(rev + 1);
putchar(*rev);//change this.
}
return 1;
}
归功于@devinb。
//此程序可帮助您查找数组中的最大和最小数目
#include<iostream.h>
#include<conio.h>
int main()
{int max;
int a[5]={12,1,0,4,5};
int min=a[0];
int i=1;
max=a[0];
while(i<=4)
{
if (max < a[i])
max=a[i];
if (min > a[i])
min=a[i];
i++;
}
cout << min <<"\n";
cout << max;
getch();
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.