我被要求编写一个程序来检测以下哪种格式用于标识符,然后将该标识符转换为其他格式:
在Java中,多字标识符的构造方式如下:第一个字是从小写字母开始写的,后面的字是从大写字母开始写的,不使用分隔符。所有其他字母都很小。 Java标识符的示例包括javaIdentifier
,longAndMnemonicIdentifier
,name
,nEERC
。
C ++在其标识符中仅使用小写字母。要分隔单词,它使用下划线字符“_”。 C ++标识符的示例是c_identifier
,long_and_mnemonic_identifier
,name
(您可以看到,只有一个词,Java和C ++人都同意),n_e_e_r_c
。
如果不是,则程序应报告错误。翻译必须保留单词的顺序,并且只能更改字母大小和/或添加/删除下划线。
输入:
输入文件由包含标识符的多行组成。它由英文字母和下划线组成。它的长度不超过100。
输出:
如果输入标识符是Java标识符,则输出其C ++版本。如果是C ++标识符,则输出其Java版本。如果不是,则输出'Error!'代替。
所以这是我在C ++中的代码;我在在线评委中提交了它,但它给出了错误的答案。我不知道出了什么问题。它通过了我自己的所有测试用例。
有人可以帮我找到问题吗?
#include<iostream>
#include<string>
#include <ctype.h>
using namespace std;
void Convert(string input){
string output = "";
string flag = "";
bool underscore = false;
bool uppercase = false;
if ( islower(input[0]) == false){
cout << "Error!" <<endl;
return;
}
for (int i=0; i < input.size(); i++){
if ( (isalpha( input[i] ) || (input[i]) == '_') == false){
cout << "Error!" <<endl;
return;
}
if (islower(input[i])){
if (underscore){
underscore = false;
output += toupper(input[i]);
}
else
output += input[i];
}
else if (isupper(input[i])){
if (flag == "C" || uppercase){
cout << "Error!"<<endl;
return;
}
flag = "Java";
output += '_';
output += tolower(input[i]);
}
else if (input[i] == '_'){
if (flag == "Java" || underscore){
cout << "Error!" <<endl;
return;
}
flag = "C";
underscore = true;
}
}
cout << output <<endl;
}
int main(){
string input;
while (cin >> input)
Convert(input);
return 0;
}
答案 0 :(得分:1)
如果最后一个字符是_
怎么办?在这种情况下,您还应该打印返回Error!
。
此外,您似乎永远不会更改uppercase
- 您应该删除它。