一、题目链接
http://noi.openjudge.cn/ch0107/06/
二、解题思路(Java)
◎ java.lang.Character.isDigit(char c)方法:判断给定的字符c是否为数字字符,如果是则返回true,否则返回false;
◎ java.lang.Character. isLetterOrDigit(char c)方法:判断给定的字符c是否为数字或字母字符,如果是则返回true,否则返回false;
◎ 方法public boolean isIdentifier(String text)处理所有业务逻辑:
→ 参数text为String类型的对象,代表给定字符串;
→ isIdentifier方法返回逻辑值,为true当且仅当text是合法C标识符,否则false;
◎ 定义char类型的数组chars,存储text中的每个字符,定义语句如下:
→ char[] chars = text.toCharArray();
◎ 以下判断text是否为合法C标识符:
→ 如果判断表达式isDigit(chars[0])成立,也即text的首字符是数字字符,则text为非法C标识符,返回false;
→ 否则,text的首字符不是数字字符:
*** 利用foreach循环遍历获取text的每个字符c:
··· 如果判断表达式!isLetterOrDigit(c)&&c != '_'成立,也即text的当前字符c不是数字、字母、下划线,则text为非
法C标识符,返回false;
◎ 以上没有返回false,说明text是合法C标识符,返回true。
◎ 在main方法中调用isIdentifier方法,注入相应的参数后即可获得计算结果,根据计算结果为true或false,输出yes或no。
三、解题思路(C++)
◎ isdigit(char c)函数:判断给定的字符c是否为数字字符,如果是则返回true,否则返回false;
◎ isalnum(char c)函数:判断给定的字符c是否为数字或字母字符,如果是则返回true,否则返回false;
◎ 定义并输入string类型的字符串text,代表给定字符串;
◎ 定义bool类型的逻辑量flag,标记text是否为合法C标识符,初始时假定text合法,令flag = true;
◎ 以下判断text是否为合法C标识符:
→ 如果判断表达式isdigit(text[0])成立,也即text的首字符是数字字符,则标记text为非法C标识符,令flag = false;
→ 否则,text的首字符不是数字字符:
*** 利用foreach循环遍历获取text的每个字符c:
··· 如果判断表达式!isalnum(c) && c != '_'成立,也即text的当前字符c不是数字、字母、下划线,则标记text为非法C标
识符,令flag = false,无需检测剩余字符,通过break语句跳出foreach循环;
foreach循环结束后,flag标记了text是否为合法C标识符;
◎ 如果flag为true,输出yes,否则输出no。
四、Java程序
import java.util.Scanner;
import static java.lang.Character.isDigit;
import static java.lang.Character.isLetterOrDigit;
public class Main {
public boolean isIdentifier(String text) {
char[] chars = text.toCharArray();
if (isDigit(chars[0])) {
return false;
}
else {
for (char c : chars) {
if (!isLetterOrDigit(c) && c != '_') {
return false;
}
}
}
return true;
}
public static void main(String[] args) {
Main test = new Main();
Scanner input = new Scanner(System.in);
String text = input.next();
if (test.isIdentifier(text)) {
System.out.print("yes");
}
else {
System.out.print("no");
}
}
}
五、C++程序
#include <iostream>
using namespace std;
int main()
{
string text;
cin >> text;
bool flag = true;
if (isdigit(text[0]))
{
flag = false;
}
else
{
for (char c: text)
{
if (!isalnum(c) && c != '_')
{
flag = false;
break;
}
}
}
if (flag)
{
cout << "yes";
}
else
{
cout << "no";
}
return 0;
}