我正在尝试反转一个数组并同时将它存储在一个带有for
循环的新数组中。我已经手动实现了它,但没有循环。下面的第一个代码使用循环,后者手动或字面。
char wrd[26],rev[26];
int y,i,s;
s=strlen(wrd)-1;
for(y=0;y<s;y++) for(i=s;i>=0;i--)
{
rev[y]=wrd[i];
}
以下是手动完成的;它可以工作,但你得到用于填充数组其余部分的随机字符:
{
char drw[26], wrd2[26];
int s,i=0;
s=strlen(wrd2)-1;
drw[0]=wrd2[s];
drw[1]=wrd2[s-1];
drw[2]=wrd2[s-2];
drw[3]=wrd2[s-3];
drw[4]=wrd2[s-4];
drw[5]=wrd2[s-5];
drw[6]=wrd2[s-6];
drw[7]=wrd2[s-7];
drw[8]=wrd2[s-8];
drw[9]=wrd2[s-9];
drw[10]=wrd2[s-10];
drw[11]=wrd2[s-11];
drw[12]=wrd2[s-12];
drw[13]=wrd2[s-13];
drw[14]=wrd2[s-14];
drw[15]=wrd2[s-15];
drw[16]=wrd2[s-16];
drw[17]=wrd2[s-17];
drw[18]=wrd2[s-18];
drw[19]=wrd2[s-19];
drw[20]=wrd2[s-20];
drw[21]=wrd2[s-21];
drw[22]=wrd2[s-22];
drw[23]=wrd2[s-23];
drw[24]=wrd2[s-24];
drw[25]=wrd2[s-25];
cout << drw;
}
答案 0 :(得分:3)
你有两个嵌套循环,它们没有做你认为他们正在做的事情。你只需要一个:
int y, s;
s = strlen(wrd) - 1;
for (y = 0; y<=s; y++)
{
rev[y] = wrd[s - y];
}
并且不要忘记终止:
rev[s + 1] = 0;
答案 1 :(得分:0)
由于您正在使用C ++,因此请利用它提供的库。根据您是否希望对元素进行内存顺序访问(如果您要将其作为字符串读取,您可能会这样做),您可以使用std::vector
反向或者使用list / forward_list如果连续访问不是问题。 std::list
可以直接提供reverse
方法。
#include <vector>
#include <algorithm>
using namespace std;
//int main() {
vector<char> chars;
const char *mystr = "abcdef";
chars.reserve(6);
chars.assign(mystr, mystr+6); //assuming we don't want the null terminator.
reverse(chars.begin(), chars.end());
cout << string(&chars.front(), chars.size()) << endl;
//}
包含保留以最大化复制操作的性能。
此外,如果将mystr
声明为char数组(或者至少指向可写内存),您也可以执行reverse(mystr, mystr+6)
。