سلام
من کد شما را به شکل زیر تغییر دادم. کد زیر دو مشکلی را که شما به آن اشاره کرده بودید برطرف میسازد اما کد زیر یک مشکل هم دارد. به عنوان مثال اگر بنویسید 123asd خروجی num را نمایش میدهد. (البته asd123 درسته، یعنی خروجی asd123 را نمایش میدهد.) اگر با عدد شروع شود و در ادامه حرف هم با آن بیآید آن را به عنوان «عدد» در نظر میگیرد، نه به عنوان «عبارت ثابت».
#include <iostream>
using namespace std;
int main()
{
bool isConstantExpresstion = false;
bool isOneCharacter = true;
bool isMultiDigit = false;
char variable[100] = {'\0'}; // important
cout << "Please enter your phrase...";
cout << '\n';
cin >> variable;
if (variable[1] != '\0')
{
isOneCharacter = false;
}
cout << "Scanner from is..." << '\n';
for (int i = 0; variable[i] != '\0'; ++i)
{
if ( (variable[i] >= 'a' && variable[i] <= 'z') && isOneCharacter == true)
{
cout << "id";
}
else if (variable[i] == '+' || variable[i] == '-' ||
variable[i] == '*' || variable[i] == '/' || variable[i] == '%')
{
cout << variable[i];
}
else if (variable[i] >= '0' && variable[i] <= '9' &&
isMultiDigit == false && isConstantExpresstion == false)
{
cout << "num";
isMultiDigit = true;
}
else if (isMultiDigit == false)
{
cout << variable[i];
isConstantExpresstion = true;
}
}
cout << '\n';
}