将字符串元素传递给函数

时间:2016-10-21 17:51:30

标签: c++ stack

当我将字符串'input'的元素传递给函数output.push(input[i]); 时,相同的值不会被传递而是另一个值存储在char x

void stack::push(char x){
    STACK.push_back(x);
}


void string_to_stack(stack &output, string input){
    for (int i = 0; i < input.size(); i++){
        if (input[i] != ','){
            output.push(input[i]);
        }
    }
}
  
    

其中'stack'是一个类如下

  
class stack{ 
private: vector<int> STACK;
public:     stack();    
stack(vector<int>);     
void push(char); 
void pop(); 
vector<int> getter(); 
};

Here's a sample of input string and STACK

1 个答案:

答案 0 :(得分:0)

您没有在output中显示检查值的位置,因此我的猜测是您的代码类似于:

void stack::push(char x){
    STACK.push_back(x);
}

// this one looks different in question, but void pop() makes no sense
// if top element is not available
// if you have STACK::top, substitute each pop() call below with top(), pop()
int STACK::pop() {
    int v = STACK[0];
    STACK.erase(0);
    return v;
}

// remember to use reference in the signature - otherwise original stack won't be changed
void string_to_stack(stack& output, string input){
    for (int i = 0; i < input.size(); i++){
        if (input[i] != ','){
            output.push(input[i]);
        }
    }
}

void call_site() {
    string str("abcsd");
    stack stck;

    string_to_stack(stck, str);

    while(!stck.empty())
        cout << stck.pop(); // you extract int value here
}

注意pop签名的变化 - 它必须返回一些内容。我选择了int,因为我认为这是你的主要问题,但只是使用char而不是int可能就足够了(但是我不推荐它,因为编译器会抱怨和在不必要的情况下进行此类转换通常不是一个好习惯。

在这种情况下,在cout期间,您将获得字符串元素的数值(“3”为51,“+”为43等 - 请参阅ASCII表)。如果您想访问char,则必须在stack中将您的容器声明为vector<char>而不是vector<int>,或者在阅读后转换为char(例如cout << static_cast<char>(stck.pop())