2015-06-23 4 views
0

У меня иногда возникают проблемы с программированием, но я вообще в порядке и всегда имею проблему понимания концепции отлично, но я ударяю кирпичную стену, когда я пытаюсь для реализации реальной программы для выполнения операции.Проблема с появлением символов стека и сохранение их в строке

У меня есть задание для работы, в котором я должен взять строку ввода, прочитать ее символ по символу в стек (используя связанный список), а затем вытащить этот результат из стека, сохранить его в новый и затем сравнить строки, чтобы определить, является ли эта конкретная входная строка или не является палиндром.

Единственная проблема, с которой я, похоже, столкнулся (надеюсь) в самом конце программы. Когда я пытаюсь вытащить каждый символ из стека и сохранить их в строке отдельно, я получаю проблему, когда Visual Studio говорит мне: «ошибка C2664:« Stack :: pop »: невозможно преобразовать параметр 1 из« unsigned int »в «символ &» "

void Stack::pop(char &input_string) { 
    StackNode* temp; 

    if (isEmpty()) { 
     cout << "The stack is empty." << endl; 
    } 

    else { 
     input_string = top->value; 
     temp = top->next; 
     delete top; 
     top = temp; 
    } 
} 

    int main() { 

    Stack stringStack; 

    string input_string; 
    string reverse_input; 

    cout << "Input the desired string to determine if it is a palindrome or not. No spaces please." << endl; 

    cin >> input_string; 

    for (unsigned int i=0; i < input_string.length(); i++) { 
     stringStack.push(input_string[i]); 
    } 

    while (!stringStack.isEmpty()) { 
     for (unsigned int j=0; j < input_string.length(); j++) { 
      stringStack.pop(j) = reverse_input[j]; 
     } 
    } 

    if (reverse_input == input_string) { 
     cout << "Your input is a palindrome!" << endl; 
    } 
    else { 
     cout << "Your input was not a palindrome, try again!" << endl; 
    } 

    system ("PAUSE"); 
} 

Я понимаю, что это говорит мне, что я не могу передать J в функцию поп выскочить значения, так как функция поп Я предрек ожидает символьное значение.

Может ли это быть устранено путем изменения ввода функции pop на целое число, а затем с помощью функции pop, чтобы вернуть значение char?

Я исключаю все другие функции файла cpp, кроме функции pop и основной функции выполнения, сообщите мне, если вам по какой-то причине нужно увидеть другую часть.

Заранее благодарим за помощь. Это очень ценится.

+0

является 'в то время как (stringStack.esEmpty (!))' Необходимо? как я вижу, вам нужно только повторить цикл 'for' один раз, чтобы заполнить список' reverse_input', предполагая, что 'for' работает правильно, на самом деле вы можете использовать' while' вместо 'for' – Ediac

+0

Это,' ' char & input_string', вводит в заблуждение, потому что вы объявляете ссылку на ** один символ **, а не на строку. Используйте 'std :: string' для 1 * или более * символов. –

+0

Вы не перестали читать сообщение об ошибке И посмотрите на код, генерирующий его. Вы передаете индекс цикла j, где ожидается символ. Если вы посмотрите на строку с ошибкой, ответ будет там. – kfsone

ответ

0

В этой части:

while (!stringStack.isEmpty()) { 
    for (unsigned int j=0; j < input_string.length(); j++) { 
     stringStack.pop(j) = reverse_input[j]; 
    } 
} 

Если предположить, что цель состоит в том, чтобы взять элемент в верхней части стека с pop и добавить его в конец строки reverse_input так, что в результате reverse_input было бы реверс input_string, есть слишком много циклов.

for(unsigned int j = 0; !stringStack.isEmpty() ; j++){ 
    //Code Here 
} 

Или:

while(!stringStack.isEmpty()){ 
    //Code Here 
} 

stringStack.pop(j) = reverse_input[j]; Также на самом деле не назначая ничего, так как pop функция недействительна.

Один из вариантов заключается в следующем:

Измените pop так, что она возвращает char элемент в верхней части.

char Stack::pop() { 
    StackNode* temp; 
    char mychar = '\0'; 

    if (isEmpty()) { 
     cout << "The stack is empty." << endl; 
    } 

    else { 
     mychar = top->value; 
     temp = top->next; 
     delete top; 
     top = temp; 
    } 
    return mychar; 
} 

Тогда:

reverse_input = ""; //To make sure it is empty 
while(!stringStack.isEmpty()){ 
    reverse_input += stringStack.pop(); 
} 
Смежные вопросы