变量定义(C++)!

描述

我们都知道,C++的变量名定义必须遵守以下三个规范:

第一,变量名必须以字母或下划线开头;

第二,变量名只含有字母,下划线和数字;

第三,变量名不能使用C++的保留字。

现在,壮壮起了N个变量名,请你帮判断这些变量名是否合法。为简单起见,

C++的保留字只需要考虑以下十个:

“include”、“using”、 “namespace” 、“return”、“main”、

“int”、 “float”、 “double”、“string”、 “char”。

输入
N+1行,第一行,一个整数N,表示变量名的个数。(1<=N<=20)

第2行到第N+1行,每行一个字符串,表示一个变量名。

每个变量名的长度小于100个字符.

输出
N行,每行对输入的一个变量名做出判断,如果变量名合法,输出“Yes”,否则输出“No”。

输入样例 1

4
doub le
Doub le
double pi=3. 14
3Q
输出样例 1

No
Yes
No
No
来源

2023 广西中小学生程序设计挑战赛进阶组复赛

语言:
C++

遍历字符串进行过滤,看看是否符合要求,代码如下:

#include <iostream>
#include <string>
#include <cstring>
using namespace std;

int isAlf(char c)
{
    if (c >= 'a' && c <= 'z')
        return 1;
    if (c >= 'A' && c <= 'Z')
        return 1;
    return 0;
}

int isNumber(char c)
{
    if (c >= '0' && c <= '9')
        return 1;
    return 0;
}



int main()
{
    int T;
    cin >> T;
    getchar();
    char blz[][40] = { "include","using","namespace","return","main","int","float","double","string","char" };
    for (int i = 0; i < T; i++)
    {
        string s;
        getline(cin, s);
        //判断是否一字母或下划线开头
        if (isAlf(s.at(0)) || s.at(0) == '_')
        {
            //判断是否金汉字母,下划线和数字
            int j = 0;
            for (; j < s.length(); j++)
            {
                if (isAlf(s.at(j)) || isNumber(s.at(j)) || s.at(j) == '_')
                    continue;
                else
                    break;
            }
            if (j == s.length())
            {
                //判断是否是保留字
                int k = 0;
                for (; k < 10; k++)
                {
                    if (strcmp(s.c_str(), blz[k]) == 0)
                        break;
                }
                if (k == 10)
                    cout << "Yes" << endl;
                else
                    cout << "No" << endl;
            }
            else
                cout << "No" << endl;
        }
        else
            cout << "No" << endl;
    }
    return 0;
}


使用循环遍历字符串,然后逐个判断是否规范。

代码如下:

参考链接:


C++判断一个字符是否为字母或者数字的方法_c++判断是否为字母_snowcatvia的博客-CSDN博客 1、范围确定判断一个字符是否为:小写字母:字符大于等于a,小于等于z;大写字母:字符大于等于A,小于等于Z;数字:字符大于等于0,小于等于9;#includeusing namespace std;int main(){ char c; cin >> c; if(c <= 'z' &&a..._c++判断是否为字母 https://blog.csdn.net/snowcatvia/article/details/96862939


#include <iostream>
#include <ctype.h>
#include <string.h>

using namespace std;

int main(void){
    
    int N;
    char varName[101];  // 存储变量名的字符数组 
    
    // 10 个保留字字符串 
    char reservedWords[10][20]={
    "include","using","namespace", "return" ,"main",
    "int", "float", "double","string", "char"};
    
    cin>>N;  // 获取N 
    cin.get();  // 清除换行 
    for(int i=0;i<N;i++){
        
        // https://blog.csdn.net/qq_36770641/article/details/88552618
        cin.get(varName,100); // 获取变量名 
        cin.get(); // 清除换行 
    //    cout<<"varName="<<varName<<endl; 
        
        // https://blog.csdn.net/snowcatvia/article/details/96862939
        if(isalpha(varName[0])==0&&varName[0]!='_'){  // 判断规范一, 如果不是字母并且不是下划线则输出No 
            cout<<"No"<<endl;
            continue;
        }
        
        int same=0;
        //判断规范三是否满足,判断变量名是否和10个保留字 相同,如果相同则输出No 
        for(int k=0;k<10;k++){
                
            if(strcmp(varName,reservedWords[k])==0){
                cout<<"No"<<endl;
                same=1;
                break;
            }
        }
        // 如果相同,则判断下一个变量名 
        if(same==1){
            continue;
        }
        
        int rule2=1;
        // 判断规范二是否满足,遍历变量名字符串,从下标为1的字符开始判断 
        for(int j=1;j<strlen(varName);j++){
            char ch = varName[j];
            
            // 如果当前字符不是数字并且不是字母,以及不是下划线,则输出No 
            if(isalpha(ch)==0&&isdigit(ch)==0&&ch!='_'){
                rule2=0;
                cout<<"No"<<endl;
                break;
            }        
            
        }
        
        // 经过前面规范一,规范三的检查,并且这里规范二也满足,则输出Yes 
        if (rule2==1){
            cout<<"Yes"<<endl;
        }
        
    }
    
    
    
    return 0;
    
} 

img

【以下回答由 GPT 生成】

解决方案

首先,我们需要定义一个函数来判断一个变量名是否合法。我们可以按照题目要求的三个规范来逐个判断。

bool isValidVariableName(string name) {
    // 第一,变量名必须以字母或下划线开头
    char firstChar = name[0];
    if (!(isalpha(firstChar) || firstChar == '_')) {
        return false;
    }

    // 第二,变量名只能包含字母、下划线和数字
    for (int i = 1; i < name.length(); i++) {
        char c = name[i];
        if (!(isalpha(c) || isdigit(c) || c == '_')) {
            return false;
        }
    }

    // 第三,变量名不能使用C++的保留字
    set<string> reservedWords = {"include", "using", "namespace", "return", "main", "int", "float", "double", "string", "char"};
    if (reservedWords.count(name) > 0) {
        return false;
    }

    return true;
}

然后,我们需要读取输入并逐个判断每个变量名是否合法。最后输出结果。

#include <iostream>
#include <string>
#include <set>
using namespace std;

bool isValidVariableName(string name) {
    // 判断变量名是否合法的函数
    // ...
}

int main() {
    int N;
    cin >> N;

    for (int i = 0; i < N; i++) {
        string name;
        cin >> name;

        if (isValidVariableName(name)) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
    }

    return 0;
}

以上是使用C++来解决该问题的具体解决方案。根据题目的要求,我们定义了一个isValidVariableName函数来判断变量名的合法性。然后,我们在主函数中使用该函数来判断每个变量名,并输出相应的结果。注意,在判断保留字时,我们使用了一个set数据结构来存储保留字,这样方便快速地进行判断。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^