我可以将字符串存储在字符数组中但顺序相反,例如 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 数组。然后,您只需要向后循环字符串的字符并将其存储到您的数组中。 我建议您在循环中遵循(写在纸上)ilen-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) 指向字符串中的最后一个字符吗?的主要内容,如果未能解决你的问题,请参考以下文章

当问题在C++中以相反的顺序要求输入时如何显示用户输入字符串[关闭]

类的数据成员为数组,怎么样根据键盘输入的数据顺序建立对象?

如何在字符串数组中找到地图的键?

使用冒泡排序对Java中的名称数组按字母顺序排序

Base64原理

C语言指针将数组中n个整数按相反顺序存放