题意:
将java和c++中的变量名相互转换,比如:long_and_mnemonic_identifier装换为longAndMnemonicIdentifier。
思路:
直接模拟遍历替换,陷阱很多。。
代码:
//poj 3157
//sep9
#include <iostream>
using namespace std;
char s[256],ans[256];
void deal()
{
int i,j;
int style1=0,style2=0;
for(i=0;s[i]!='\0';++i)
if(s[i]=='_')
style1=1;
else if('A'<=s[i]&&s[i]<='Z')
style2=1;
if(style1+style2==2){
printf("Error!\n");
return;
}
for(i=0,j=0;s[i]!='\0';)
if('a'<=s[i]&&s[i]<='z')
ans[j++]=s[i++];
else if(s[i]=='_'){
if(s[i+1]=='\0'||i==0||s[i+1]=='_'){
printf("Error!\n");
return ;
}
else{
++i;
ans[j++]=s[i++]-'a'+'A';
}
}else if('A'<=s[i]&&s[i]<='Z'){
if(j==0){
printf("Error!\n");
return ;
}
ans[j++]='_';
ans[j++]=s[i++]-'A'+'a';
}else{
printf("Error!\n");
return ;
}
ans[j]='\0';
printf("%s\n",ans);
}
int main()
{
while(scanf("%s",&s)==1)
deal();
return 0;
}