小Hi写程序时习惯用蛇形命名法(snake case)为变量起名字,即用下划线将单词连接起来,例如:file_name、 line_number。
小Ho写程序时习惯用驼峰命名法(camel case)为变量起名字,即第一个单词首字母小写,后面单词首字母大写,例如:fileName、lineNumber。
为了风格统一,他们决定邀请公正的第三方来编写一个转换程序,可以把一种命名法的变量名转换为另一种命名法的变量名。
你能帮助他们解决这一难题吗?
Input
第一行包含一个整数N,表示测试数据的组数。(1 <= N <= 10)
以下N行每行包含一个以某种命名法命名的变量名,长度不超过100。
输入保证组成变量名的单词只包含小写字母。
Output
对于每组数据,输出使用另一种命名法时对应的变量名。
Sample Input
2
file_name
lineNumber
Sample Output
fileName
line_number
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
vector<char> name; //定义一个动态数组
char str; //字符输入控制变量
int t, i;
scanf("%d", &t ); /*测试组数*/
getchar(); /*吞掉输入t后产生的回车符*/
while( t-- ){
while( ( str = getchar() ) != '\n' ){
name.push_back( str ); /*将读取的字符放入数组*/
}
for( i=0; i<name.size(); i++ ){ /*遍历查找符合条件的情况*/
if( name[i] == '_' ){
name[i+1] = name[i+1] - ( 'a' - 'A' ); /*小写变大写*/
name.erase( name.begin() + i ); /* 删除'_'*/
//break; /*题目暗含的意思是所有,下同*/
}
else if( name[i] >= 'A' && name[i] <= 'Z' ){
name.insert( name.begin()+i, '_' ); /*插入*/
name[i+1] = name[i+1] + ( 'a' - 'A' ); /*大写变小写*/
//break;
}
}
for( i=0; i<name.size(); i++ )
printf("%c", name[i] );
printf("\n");
name.clear(); /*清空,为下一次做准备*/
}
return 0;
}