我可以将字符串存储在字符数组中但顺序相反,例如 0(index) 指向字符串中的最后一个字符吗?
Posted
技术标签:
【中文标题】我可以将字符串存储在字符数组中但顺序相反,例如 0(index) 指向字符串中的最后一个字符吗?【英文标题】:Can I store a string in character array but reverse order, such that 0(index) points to last character in string? 【发布时间】:2020-10-24 16:56:58 【问题描述】:我开始学习编程,我试图将一个字符串存储到一个字符数组中,但顺序相反,这样数组索引位置 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
【问题讨论】:
为什么会有第二个for
循环?正如 Spock 先生所说:这是非常不合逻辑的。例如,当 i
是 0 作为内部 for 循环的结果时,首先将 str[0]
设置为 entstr[len-1]
,然后立即将 str[0]
设置为 entstr[len-2]
,依此类推。通过这样做,您打算完成什么?
“我想用 C++ 解决这个问题”——已经解决了。 std::string
和反向迭代器 rbegin()
和 rend()
执行您想要的操作。
std::reverse(s.begin(), s.end());
或 s = string(s.rbegin(), s.rend());
感谢您的回复,是的,第二个 for 循环没有意义,我正在尝试不同的 for 循环变体,但这里没有更新。
【参考方案1】:
我猜你不想使用 cmets 中提到的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;
祝你好运!
【讨论】:
这里,说避免像谢谢这样的评论,但是谢谢,我得到了我要找的东西。【参考方案2】:我认为两个循环没有任何用处。只需从前面开始字符串,从 len-1 开始您的数组(就像您在 for 循环中为打印所做的那样)。您可以采用任何您希望 char 数组的长度。
#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];
【讨论】:
以上是关于我可以将字符串存储在字符数组中但顺序相反,例如 0(index) 指向字符串中的最后一个字符吗?的主要内容,如果未能解决你的问题,请参考以下文章