簡體   English   中英

C++中將數組的字符類型組織成單獨的數組

[英]Organize character types of array into separate arrays in C++

我正在嘗試編寫一個小程序,它采用用戶定義的有限字符選擇字符串(小寫字母、括號以及 + 和 * 運算符),查看每個字符,並將它們組織成單獨的數組。 我認為我對這個練習的方法會相當簡單,但我遇到了一些我無法弄清楚的問題。

當我嘗試將單個數組打印到屏幕時,我的問題變得明顯。 如果所有字符都屬於相同類型(例如,“abcd”),則數組按預期打印。 但是,如果存在字符類型的組合(例如,“(a+b)”),則數組打印不正確。 我很慚愧地說,我已經在這個(可能很明顯的)問題上掙扎了好幾個小時,似乎無法弄清楚我做錯了什么。 任何輸入將不勝感激 - 我不是在尋求幫助編寫程序,我只是想知道我做錯了什么。 我在下面包含了我的代碼:

#include <iostream>
#include <string>

using namespace std;

void charOrganizer(int[], char[], char[], char[], int, int&, int&, int&);

int main()
{
//Variable declaration
string userExpression;
int expressionArray[userExpression.length()];
char letterToken[userExpression.length()];
char parenthesesToken[userExpression.length()];
char plusTimesToken[userExpression.length()];
int letterTokenPos = 0;
int parenthesesTokenPos = 0;
int plusTimesTokenPos = 0;

//Prompt user for string input
cout << "Please enter a mathematical expression only using lowercase letters of the \nalphabet, parentheses, and/or the addition/multiplication operators."<< endl;
cin >> userExpression;

int arraySize = userExpression.length();

for (int i = 0; i < arraySize; ++i)
{
    expressionArray[i] = userExpression[i];
}

charOrganizer(expressionArray, letterToken, parenthesesToken, plusTimesToken, arraySize, letterTokenPos, parenthesesTokenPos, plusTimesTokenPos);

//Print tokens to screen
cout << "LowerCase Letter Token values in your string:" << endl;
for (int i = 0; i < letterTokenPos; i++)
{
    cout << letterToken[i] << endl;
}

cout << "Parentheses Token values in your string:" << endl;
for (int i = 0; i < parenthesesTokenPos; i++)
{
    cout << parenthesesToken[i] << endl;
}

cout << "Operator Token values in your string:" << endl;
for (int i = 0; i < plusTimesTokenPos; i++)
{
    cout << plusTimesToken[i] << endl;
}

return 0;
}

void charOrganizer (int charValue[], char letArr[], char parArr[], char pluTimArr[], int size, int& letPosition, int&parPosition, int& operPosition)
{   
for (int i = 0; i < size; i++)
{
    if (charValue[i] > 96 && charValue[i] < 123)
    {
        letArr[letPosition] = charValue[i];
        cout << "Letter Copy Test: " << letArr[letPosition] << endl;
        letPosition++;
    }

    else if (charValue[i] == 40 || charValue[i] == 41)
    {
        parArr[parPosition] = charValue[i];
        cout << "Parentheses Copy Test: " << parArr[parPosition] << endl;
        parPosition++;
    }

    else if (charValue[i] == 42 || charValue[i] == 43)
    {
        pluTimArr[operPosition] = charValue[i];
        cout << "Operator Copy Test: " << pluTimArr[operPosition] << endl;
        operPosition++;
    }

    else
    {
        cout << "Invalid input" << endl;
    }
}

/*cout << "Print Array Test: " << endl;
for (int i = 0; i < letPosition; i++)
{
    cout << letArr[i] << endl;
    //cout << parArr[i] << endl;
    //cout << pluTimArr[i] << endl;
}*/
}

看到你下面的代碼。 您正在使用空字符串的長度來聲明數組大小,如下所示。 在這種情況下,所有數組大小將僅為零大小。 正確更正:-

//Variable declaration
string userExpression;
int expressionArray[userExpression.length()];// it would be just like int expressionArray[0];
char letterToken[userExpression.length()];
char parenthesesToken[userExpression.length()];
char plusTimesToken[userExpression.length()];

int expressionArray[30];
char letterToken[30];
char parenthesesToken[30];
char plusTimesToken[30];

否則,您在輸入字符串后聲明這些變量。

暫無
暫無

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

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