簡體   English   中英

如何更改輸入字符串中提到的變量?

[英]How to change variable mentioned in input string?

我有一個學生的學校項目,我主要是用PHP編程,所以C ++不是我的強項:)請讓我知道,是否可以更改在cin字符串中提到的變量? 也許下面的代碼更容易理解:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

string A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, R, Q, S, T, U, V, W, X, Y, Z;
string instrukcja;
string krok[3];
int i = 0;

string MAKENULL()
{
    return " ";
}

void WRITE(string x)
{
    cout << x;
}

int main()
{   
    // get instruction Begin
    char s[10];
    scanf("%10[0-9a-zA-Z ]", s);
    istringstream iss(s);
    while(iss)
    {
        string sub;
        iss >> sub;
        krok[i] = sub;
        i++;
    }
    // get instruction End


    if (krok[0] == "MAKENULL")
    {
        "" Variable in krok[1] "" = MAKENULL();
    }

    if (krok[0] == "WRITE")
    {
        WRITE("" Variable in krok[1] "");
    }

    if (krok[0] == "OPPOSITE")
    {
        OPPOSITE("" Variable in krok[1] "", "" Variable in krok[2] "")
    }

}

在上面的代碼中,我將執行類似於ADD AB的操作,並且A應該變成A => A + B(一個字符串堅持另一個字符串)。 主要問題是,我可以在scanf中指向要更改的變量嗎?

如果我正確理解的話,而不是現在像現在一樣保留變量A,B,C ...,則需要一個映射容器

#include <map>
// ...
std::map<std::string, std::string> varMap;

其中key是變量名:A,B,C,value是其值。

然后,當您將值分配給變量A時,可以使用當前的讀取方式,然后使用:

varMap["A"] = newValue;

當您閱讀它時,還可以使用std::string value = varMap["A"] ,但請注意,如果map中不存在“ A”,則會對其進行初始化並初始化值(調用默認構造函數-這樣它是空字符串)。 要檢查密鑰是否存在,請使用if (varMap.find("A") == varMap.end()) {/*no such variable*/}

另一件事是您istringstream用法是錯誤的,應在使用前檢查是否已閱讀某些內容,正確的習慣用法是:

istringstream iss(s);
string sub;
while(iss >> sub)
{
    krok[i] = sub;
    i++;
}

[編輯]

您可能想到的是可以使用php之類的變量變量概念 ,或者從Java和其他語言中反射出來。 在c ++中沒有這樣的東西,並且推薦的方式-就像在php中一樣,是使用像map這樣的關聯容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM