首页 > 解决方案 > 当我只打算反转其中一个时,为什么我的两个数组都是相反的顺序?[C++]

问题描述

尝试创建各种回文检查器,其中一个过程涉及反转数组。用户输入要输入的字符数,一个一个地输入字符,代码本身会判断它是否是回文(相同的词在颠倒时,racecar 拼写为racecar backs )。问题是,我需要反转一个数组来创建一个条件,但是我的代码却反转了我的两个数组。下面是代码。

#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
    int no = 0, j, palin = 1;
    char in, temp;
    stack <char> s, h;
    cout << "Enter amount of characters: ";
    cin >> no;
    string kimak, rord, gah;
    for (int i = 0; i < no; i++) {
        cout << "Enter word no." << (i + 1) << ": ";
        cin >> in;
        s.push(in);
    }
    for (int i = 0; i < no; i++) {
        kimak[i] = s.top();
        rord[i] = s.top();
        s.pop();
    }
    j = no - 1;
    for (int i = 0; i < j; i++, j--) { // reverses array
        temp = rord[i];
        rord[i] = rord[j];
        rord[j] = temp;
    }
    cout << "Ordered No. ";
    for (int i = 0; i < no; i++) {
        cout << kimak[i] << "\n";
    }
    cout << "\nReversed No. ";
    for (int i = 0; i < no; i++) {
        cout << rord[i] << "\n";
    }
    for (int i = 0; i < no; i++) {
        if (kimak[i] != rord[i]) {
            palin = 0;
        }
    }
    if (palin == 1) {
        cout << "Palindrome No. : YES";
    }
    if (palin == 0) {
        cout << "Palindrome No. : NO";
    }
}

标签: c++arraysstack

解决方案


你有未定义的行为。kimak[i]并且rord[i]是未定义的,因为两个字符串的大小都是 0。

您可以在循环之前调整两个字符串的大小,也可以使用push_back字符串的函数。


推荐阅读