函数中的字符串范围

Scope of string in a function

本文关键字:范围 字符串 函数      更新时间:2023-10-16

以下是我目前遇到问题的代码部分。我的功能(命名为getguess)需要能够独立进行几个猜测(我简化了这一部分,以便输入5个猜测)并形成其单个字符串输出(命名为PrevGuesses)。猜测有一个限制,因为它们必须是较低的案例字符,并且不能重复(此限制参数是在函数prevguesses内部的while循环中设置的)。当前,PrevGuesses字符串的范围是本地的,无法固定应该添加到INT主函数中for-loop的每个循环中的猜测字符。您可以忽略我的int main函数代码的开始部分,其中需要一个称为短语的输入。

#include <iostream>
#include <string>
using namespace std;
char getGuess(string prevGuesses);
int main(){
    char guess;
    string phrase, unsolved, prevGuesses;
    cout << "Enter phrase: ";
    getline(cin,phrase);
    for (int i=0; i<5; i++){   // i<5 is an arbitrary parameter designed for 5 guesses
        getGuess(prevGuesses);
        cout << prevGuesses << endl; //this serves as a check for prevGuesses string
                                     //currently blank for every output
    }
    cout << prevGuesses << endl; //also blank 
                                 //suppose to be a string of the 5 guessed characters 
}
char getGuess(string prevGuesses){
    char guess;
    cout << "Enter a guess: ";
    cin >> guess; 
    while ((guess < 'a') || (guess > 'z') || (prevGuesses.find(guess, 0) 
    <= prevGuesses.size())){                     
        cout << "Invalid guess! Please re-enter a guess: ";
        cin >> guess;
    }
    prevGuesses = prevGuesses + guess;
    cout << prevGuesses << endl; //every output is currently the single guess character
    return guess;
}

我认为您需要将prevGuesses作为参考传递。或者,您可以使用指针。

尝试这个。

char getGuess(string &prevGuesses)

将允许调用函数实际对变量进行编辑。当前编写的方式,当您将其传递到函数中时,该变量被复制,然后将其添加到副本中,然后将其添加到范围中。