我开始学习编程,并试图将字符串存储到字符数组中,但顺序相反,这样数组索引位置0(零(指向字符串中的最后一个字符。我尝试用不同的术语使用for循环,但得到了所需的输出。我想用C++解决这个问题。这是我被卡住的代码,
#include <iostream>
using namespace std;
int main()
{
char str[maxn];
string entstr;
cin>>entstr;
int len = entstr.length();
cout<<len<<endl;
for(int i = 0 ; i < len ; i++) //this makes n no sense//
for(int j = len-1 ; j >= 0 ; j--)
str[i] = entstr[j];
for(int i = len-1 ; i >= 0 ; i--)
cout<<"Straight for array "<<i<<" "<<str[i]<<endl;
return 0;
}
OUTPUT:
sachin
6
Straight for array 5 s
Straight for array 4 s
Straight for array 3 s
Straight for array 2 s
Straight for array 1 s
Straight for array 0 s
我想你不想使用评论中提到的std::reverse
,因为你想练习你的算法技能。
你可以用这个简短的程序来帮助自己。它使用std::malloc
来分配输入字符串大小的char
数组。然后,您只需要通过字符串的字符向后循环,并将其存储到数组中。我建议你在循环中遵循(写在纸上(i
和len-1-i
的值。它将帮助您了解索引是如何工作的。
#include <iostream>
using namespace std;
int main()
{
string entstr;
cin >> entstr;
int len = entstr.length();
char* charArray = (char*) malloc (len);
for(int i = 0; i < len; i++)
{
charArray[i] = entstr[len-1-i];
}
cout << "charArray contains: ";
for(int j = 0; j < len; j++)
{
cout << charArray[j];
}
return 0;
}
祝你好运!
我认为两个循环没有任何用处。只需从前面开始字符串,从len-1开始数组(就像在for循环中打印一样(。你可以采取任何长度,你想你的字符数组。
#include <iostream>
using namespace std;
int main()
{
char str[100]; //put whatever you want the length of the char array to be
string entstr;
cin>>entstr;
int len = entstr.length();
cout<<len<<endl;
for(int i = 0 ; i < len ; i++)
{
str[len-1-i]=entstr[i];
}
for(int i = len-1 ; i >= 0 ; i--)
cout<<"Straight for array "<<i<<" "<<str[i]<<endl;
return 0;
}
你也可以使用两个指针,即一个从前面开始,一个从后面开始(如果你感到困惑(
for(int i = 0, j=len-1 ; i < len ; i++, j--)
{
str[j]=entstr[i];
}