其实呢对我来说这是一道很的水题了, 今天用C++ 的string类型写的时候一直提交不对,也没发现那里有错误,本以为又是玄学错误呢。(有次积分赛出现超级玄学问题, 一直觉得代码没错误,前前后后提交了20几遍,全给我返回的是wrong, 赛后向学长反应时,学长看了一下我的代码,以及输出结果,我靠,居然输出了一个乱码。那么问题来了,我在本地运行的时候是完全没问题的。还是最后会长说了句可能是从pdf上复制输出格式的时候出问题了。到最后这道题也没给我按对,没办法,会长说了一切以pc2判断为主。)言归正传,就去看看了以前写的代码,一看觉得也没问题啊,突然灵光一闪发现是循环终止条件上的问题。

之前是这样写的,提交返回错误
int len = str.size();
for( int i=0; i<len; i++ )

改了之后是这样, 就对了
for( int i=0; i<str.size(); i++ )

其实很对,因为在循环过程中我们有erase的操作,这样str.size()与之前的len就不相等了。

题目:

小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

string写法:

#include <bits/stdc++.h>
using namespace std;

string str;
int main()
{
    int t;
    scanf("%d", &t);
    while( t-- )
	{
		str.clear();
		cin >> str;
		int len = str.size();
		for( int i=0; i<str.size(); i++ )
		{
			if( str[i] == '_' )
			{
				str.erase(str.begin() + i);
				str[i] = str[i] - ( 'a' - 'A' );
			}
			else if( str[i] >= 'A' && str[i] <= 'Z' )
			{
				str[i] = str[i] + ( 'a' - 'A' );
                                str.insert(str.begin() + i, '_');
			}
		}
		cout << str << endl;
	}

	return 0;
}

vector写法:

#include <cstdio>
#include <vector>
using namespace std;
int main()
{
	vector<char> name;
	char str;
	int t, i, j;
	
	scanf("%d", &t );
	getchar();
	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;
}