标识符---PTA实验C++

一、题目要求

最近刚开始学C++,读到这么一句:“标识符由字母或数字或下划线构成,但首字符不能是数字”。标识符(identifier)就是变量、函数、类等各种名字。这和上学期的Java也差不多,估计老师还会出一堆标识符有效性的判断题。“懒惰是程序员的美德”,这次我要写个程序来判断,学编程不就为把工作推给电脑嘛。身为初学者,咱就考虑$或非ASCII字符之类的扩展了,也不用考虑是否关键字。另外听说C++对判断大小写、字母、数字都有库函数可用,比如isdigit()之类,搜搜用法即可,不必劳我大驾亲写。

输入规格

每行一个待判断的字符串。按行读取。处理到数据结束(EOF)为止。
代码结构参考:for(string s; getline(cin, s);){ ... }

说明:这里用的getline()是标准库的自由函数,而不是cin.getline()成员函数。

输出规格

每行一个判断结果。如符合标识符格式输出1、否则输出0。

样例输入
abc
123
样例输出
1
0
样例解释

第1行abc可以作标识符,第2行123则不行。测试点肯定比这复杂。

代码长度限制

1 KB

时间限制

1000 ms

内存限制

16 MB

栈限制

8192 KB

二、前置知识

1、逐行读取输入端字符串数据,直到下一行没有为止

 string s;
    while(getline(cin,s)){
       
    }

2、将字符串的每一个字符逐个分离成字符然后逐个判断需要用到for循环和字符串的一个s.at()函数取第x个就s.at(x),x从0开始取(因为for循环中的i从0开始)

 for(int i=0;i<s.length();i++){
            char c=s.at(i);

3、isForm()函数中,只要是不符合标识符命名需求的直接退出循环return 0,其余的情况就是为符合要求的在最后return 1即可

int isForm(string s){
    char c0=s.at(0);
     if(c0>='0'&&c0<='9'){
            return 0;//刚开始对第一个字符判断是否为数字,如果是数字则不符合标识符要求直接return 0
        }
   for(int i=0;i<s.length();i++){
            char c=s.at(i);
            if((c<'a'||c>'z')&&(c<'A'||c>'Z')&&(c<'0'||c>'9')&&(c!='_')){
//如果for循环中开始出现第一个字符c既不是大小写字母也不是数字和下划线,则后面的不需要判断了直接返回0               
                return 0;
            }
           
    }
    return 1;

三、完整C++代码实现

#include<iostream>
using namespace std;
int isForm(string);
int main(){
    string s;
    while(getline(cin,s)){
       cout<<isForm(s)<<endl; 
    }
    return 0;
}
int isForm(string s){
    char c0=s.at(0);
     if(c0>='0'&&c0<='9'){
            return 0;
        }
   for(int i=0;i<s.length();i++){
            char c=s.at(i);
            if((c<'a'||c>'z')&&(c<'A'||c>'Z')&&(c<'0'||c>'9')&&(c!='_')){
                
                return 0;
            }
           
    }
    return 1;

}

四、测评详情

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值