Kakao-オープンチャットルーム
4703 ワード
質問する
KakaoTalk公開チャットルームでは友達ではない人とチャットができ、仮想のニックネームでチャットルームに入ることができます.
新入社員のキム・クルーはKakaoTalkの公開チャットルームを開設するため、さまざまな人が入ったり出たりできる管理窓口を作ることにした.誰かがチャットルームに入ると、次のメッセージが出力されます.
【网名】入ってきた
誰かがグループから外に出ると、次のメッセージが印刷されます.
【网名】出て行った
グループ内で名前を変更する方法は2つあります.
たとえば、チャットルームでMuziとProdoのニックネームを使用している人が順番に入ると、チャットルームから次のメッセージが出力されます.
Muziが入ってきた
Prodoが入ってきた
もしグループの中の人が外に出たら、グループには次のようなメッセージが表示されます.
Muziが入ってきた
Prodoが入ってきた
Muziは出かけた
Muziが脱退して再入場した場合、Prodo名義で入場すると、既存のチャットルームのMuziもProdoに変更され、以下のようになります.
Prodoが入ってきた
Prodoが入ってきた
Prodoは出かけました
Prodoが入ってきた
チャットルームでは重複したニックネームの使用が許可されているため、現在チャットルームにProdoを使用している人が2人います.2番目にチャットルームに入ったProdoがニックネームをRyanに変更すると、チャットルームの情報は次のように変更されます.
Prodoが入ってきた
Ryanが入ってきた
Prodoは出かけました
Prodoが入ってきた
solution関数を完了し、チャットルームを入力または離れると、パラメータがニックネームを変更したレコードを含む文字列配列レコードである場合、すべてのレコード処理が完了すると、最終的に部屋を開いた人が見たメッセージが文字列配列で返されます.
せいげんじょうけん
に答える
この問題は文字列の代名詞に分けるだけでいいです.その後、map資料構造にuserIdとニックネームを保存し、Enter
、Change
とするたびに、そのIDにニックネームを変更することができる.
コード#コード#
#include <string>
#include <vector>
#include <queue>
#include <iostream>
#include <unordered_map>
using namespace std;
typedef struct {
string nickName;
string act;
string userId;
}id;
id ft_strtok(string str, char ch) {
id tmp;
vector<string> strTmp;
int start = 0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == ch) {
strTmp.push_back(str.substr(start, i - start));
start = i + 1;
}
}
strTmp.push_back(str.substr(start, str.length() - start));
tmp.act = strTmp[0];
tmp.userId = strTmp[1];
if (strTmp[0] != "Leave")
tmp.nickName = strTmp[2];
return tmp;
}
vector<string> solution(vector<string> record) {
vector<string> answer;
unordered_map<string, string> map;
vector<id> tmp;
for (int i = 0; i < record.size(); i++) {
tmp.push_back(ft_strtok(record[i], ' '));
if (tmp[i].act == "Enter")
map[tmp[i].userId] = tmp[i].nickName;
else if (tmp[i].act == "Change")
map[tmp[i].userId] = tmp[i].nickName;
}
for (int i = 0; i < tmp.size(); i++) {
if (tmp[i].act == "Enter")
answer.push_back(map[tmp[i].userId] + "님이 들어왔습니다.");
else if(tmp[i].act == "Leave")
answer.push_back(map[tmp[i].userId] + "님이 나갔습니다.");
}
return answer;
}
Reference
この問題について(Kakao-オープンチャットルーム), 我々は、より多くの情報をここで見つけました
https://velog.io/@lsmmay322/카카오-오픈채팅방
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <string>
#include <vector>
#include <queue>
#include <iostream>
#include <unordered_map>
using namespace std;
typedef struct {
string nickName;
string act;
string userId;
}id;
id ft_strtok(string str, char ch) {
id tmp;
vector<string> strTmp;
int start = 0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == ch) {
strTmp.push_back(str.substr(start, i - start));
start = i + 1;
}
}
strTmp.push_back(str.substr(start, str.length() - start));
tmp.act = strTmp[0];
tmp.userId = strTmp[1];
if (strTmp[0] != "Leave")
tmp.nickName = strTmp[2];
return tmp;
}
vector<string> solution(vector<string> record) {
vector<string> answer;
unordered_map<string, string> map;
vector<id> tmp;
for (int i = 0; i < record.size(); i++) {
tmp.push_back(ft_strtok(record[i], ' '));
if (tmp[i].act == "Enter")
map[tmp[i].userId] = tmp[i].nickName;
else if (tmp[i].act == "Change")
map[tmp[i].userId] = tmp[i].nickName;
}
for (int i = 0; i < tmp.size(); i++) {
if (tmp[i].act == "Enter")
answer.push_back(map[tmp[i].userId] + "님이 들어왔습니다.");
else if(tmp[i].act == "Leave")
answer.push_back(map[tmp[i].userId] + "님이 나갔습니다.");
}
return answer;
}
Reference
この問題について(Kakao-オープンチャットルーム), 我々は、より多くの情報をここで見つけました https://velog.io/@lsmmay322/카카오-오픈채팅방テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol