每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399
字符串处理-3-合法标识符。
输入一个字符串,判断其是否是C语言的合法标识符,标识符由字母、下划线、数字这三种类型组成,但开头必须是字母或下划线(不用判断是否和保留字相同)。
输入格式:
每组输入数据是一个长度不超过50的字符串。
输出格式:
对于每组输入数据,如果是C的合法标识符,请输出“yes”,否则,输出“no”。
输入样例:
12ajf
输出样例:
no
解决方法:
(1)算法的基本思想:
首先检查字符串首字符是否是下划线或者字母,若不是,则不合法。然后检查后续字符,检查是否是字母、数字或下划线组成的,若不是,则不合法。
(2)代码实现:
#include <iostream>
#include <string>
using namespace std;
bool isNumber(char c); //检查是否是数字字符
bool isCharacter(char c); //检查是否是字母字符
bool isUnderline(char c); //检查是否是下划线
bool isValidIDentifier(string s); //判断是否是合法标识符
int main(void)
{
string s;
cout << "请输入标识符:" << endl;
getline(cin, s);
if (isValidIDentifier(s))
{
cout << "yes" << endl;
}
else
{
cout << "no" << endl;
}
return 0;
}
bool isNumber(char c)
{
bool result = false;
if (c >= '0' && c <= '9')
{
result = true;
}
return result;
}
bool isCharacter(char c)
{
bool result = false;
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
{
result = true;
}
return result;
}
bool isUnderline(char c)
{
if (c == '_')
{
return true;
}
else
{
return false;
}
}
bool isValidIDentifier(string s)
{
bool result = true;
//检查首字符是否是下划线或字母
if (!isUnderline(s[0]) && !isCharacter(s[0]))
{
return false;
}
//检查后续字符是否是字母、下划线或数字组成
for (int i = 1; i < s.length(); i++)
{
if (!isUnderline(s[i]) && !isCharacter(s[i]) && !isNumber(s[i]))
{
result = false;
break;
}
}
return result;
}
给定一个字符串,请计算其中一共包含多少个单词(假设连续的非空格字母即为一个单词)。
输入格式:
输入数据是一个长度为S(0<S<1000)的字符串,其中只包含字母和空格。
输出格式:
请输出给定字符串一共包含的单词数。
输入样例:
Welcome to NWU
输出样例:
3