哔哩哔哩第二次笔试 第三题key-value分割
很容易理解,就是一个表达式求值,使用两个栈记录操作数,两个操作符(:、#),Java版先写出来,完了只支持C++提交赶紧改了一下,没来得及提交,C++不熟悉
C++版
#include <iostream>
#include<string>
#include<vector>
#include<stack>
using namespace std;
class KeyValue{
public:
string key;
string value;
KeyValue(string key,string value);
};
KeyValue::KeyValue(string key,string value){
this->key=key;
this->value=value;
}
void clearStack(stack<char>* stack){
while(!stack->empty()){
stack->pop();
}
}
string getString(stack<char> stack){
int keySize=stack.size();
char keyChars[keySize];
int index=keySize-1;
while (!stack.empty()){
keyChars[index]=stack.top();
stack.pop();
index--;
}
clearStack(&stack);
string s(keyChars,keySize);
return s;
}
vector<KeyValue> solution(string str){
vector<KeyValue> result;
stack<char> key;
stack<char> value;
bool flag=false;
for(int i=0;i<str.size();i++){
char current=str[i];
if(current==' '){
continue;
}
if(current==':'){
if(key.empty()){
flag=false;
continue;
}
else{
// 修改当前操作符
flag=true;
}
continue;
}
else if(current=='#'){
if(key.empty()&&value.empty()){
continue;
}
if(!key.empty()&&!value.empty()){
string keyString=getString(key);
string valueString=getString(value);
KeyValue keyValue(keyString,valueString);
result.push_back(keyValue);
}
if(!key.empty()) {
clearStack(&key);
}
if(!value.empty()) {
clearStack(&value);
}
flag=false;
continue;
}
if(flag){
value.push(current);
}
else{
key.push(current);
}
}
if(!key.empty()&&!value.empty()){
string keyString=getString(key);
string valueString=getString(value);
KeyValue keyValue(keyString,valueString);
result.push_back(keyValue);
}
return result;
}
int main() {
string a;
while(cin >> a ){
vector<KeyValue> result=solution(a);
cout<<result.size()<<endl;
for(auto it=result.begin();it != result.end();++it){
cout<<it->key<<" "<<it->value<<endl;
}
}
} Java版 package bilibili;
import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;
public class Third {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
List<KeyValue> result=solution(str);
System.out.println(result);
}
public static List<KeyValue> solution(String str){
List<KeyValue> result=new ArrayList<>();
Stack<Character> key=new Stack<>();
Stack<Character> value=new Stack<>();
boolean flag=false;
for(int i=0;i<str.length();i++){
char current=str.charAt(i);
if(current==' '){
continue;
}
if(current==':'){
if(key.isEmpty()){
flag=false;
continue;
}
else{
// 修改当前操作符
flag=true;
}
continue;
}
else if(current=='#'){
if(key.isEmpty()&&value.isEmpty()){
continue;
}
if(!key.isEmpty()&&!value.isEmpty()){
System.out.println(key);
System.out.println(value);
String keyString=getString(key);
String valueString=getString(value);
KeyValue keyValue=new KeyValue(keyString.trim(),valueString.trim());
result.add(keyValue);
}
if(!key.isEmpty()) {
key.clear();
}
if(!value.isEmpty()) {
value.clear();
}
flag=false;
continue;
}
if(flag){
value.push(current);
}
else{
key.push(current);
}
}
if(!key.isEmpty()&&!value.isEmpty()){
String keyString=getString(key);
String valueString=getString(value);
KeyValue keyValue=new KeyValue(keyString.trim(),valueString.trim());
result.add(keyValue);
}
return result;
}
public static String getString(Stack<Character> stack){
int keySize=stack.size();
char[] keyChars=new char[keySize];
int index=keySize-1;
while (!stack.isEmpty()){
keyChars[index--]=stack.pop();
}
return String.valueOf(keyChars);
}
static class KeyValue{
String key;
String value;
public KeyValue(String key,String value){
this.key=key;
this.value=value;
}
public String toString(){
StringBuilder strb=new StringBuilder();
strb.append(key);
strb.append(" ");
strb.append(value);
return strb.toString();
}
}
} 哔哩哔哩去不了了,0 60 0提交代码,尽力了!
小天才公司福利 1313人发布