对于在Java camel case和C ++下划线标识符之间进行转换的代码的错误答案

时间:2014-01-25 22:04:46

标签: c++ algorithm

我被要求编写一个程序来检测以下哪种格式用于标识符,然后将该标识符转换为其他格式:

  • 在Java中,多字标识符的构造方式如下:第一个字是从小写字母开始写的,后面的字是从大写字母开始写的,不使用分隔符。所有其他字母都很小。 Java标识符的示例包括javaIdentifierlongAndMnemonicIdentifiernamenEERC

  • C ++在其标识符中仅使用小写字母。要分隔单词,它使用下划线字符“_”。 C ++标识符的示例是c_identifierlong_and_mnemonic_identifiername(您可以看到,只有一个词,Java和C ++人都同意),n_e_e_r_c

    < / LI>

如果不是,则程序应报告错误。翻译必须保留单词的顺序,并且只能更改字母大小和/或添加/删除下划线。

输入:

输入文件由包含标识符的多行组成。它由英文字母和下划线组成。它的长度不超过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;
}

1 个答案:

答案 0 :(得分:1)

如果最后一个字符是_怎么办?在这种情况下,您还应该打印返回Error!

此外,您似乎永远不会更改uppercase - 您应该删除它。