What Are You Talking About HDU1075
生活随笔
收集整理的這篇文章主要介紹了
What Are You Talking About HDU1075
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一開始我也想用map ?但是處理不好其他字符。。
看了題解 ? 多多學習! 很巧妙 ?就是粗暴的一個字符一個字符的來 分為小寫字母和非小寫字母兩個部分 ?一但單詞結束的時候就開始判斷。
#include<bits/stdc++.h> using namespace std;int main() {string a,b;map<string ,string >ma;cin>>a;while(cin>>a&&a!="END"){cin>>b;ma[b]=a;}cin>>a;char s[3500];getchar();while(gets(s)){if(!strcmp(s,"END"))break;int n=strlen(s);a="";for(int i=0;i<n;i++){if(islower(s[i]))a+=s[i];else{if(ma.find(a)!=ma.end())cout<<ma[a];elsecout<<a;cout<<s[i];a="";}}cout<<endl;}} View Code?
字典樹寫法
注意malloc ? 和初始化 ?字符串賦值用strcpy ?不申請內存根本無法使用
因為 gets 和getchar 的問題檢查了半小時 ?注意!!!
gets會吸收\n給忘記了。。。。
有關字典樹的指針寫法規范一下
#include <iostream> #include <cstdio> #include <cstring> #include<malloc.h> using namespace std;struct node {char *val;node *next[26];int flag;node(){for(int i=0;i<26;i++){next[i]=NULL;}flag=0;} }; node *p,*root=new node();void change(char *s,char *v) {p=root;for(int i=0;s[i]!='\0';i++){int ch=s[i]-'a';if(p->next[ch]==NULL)p->next[ch]=new node();p=p->next[ch];}p->flag=1;p->val=(char*)malloc((strlen(v)+1)*sizeof(char));strcpy(p->val,v);}void find1(char *s) {p=root;for(int i=0;s[i]!='\0';i++){int ch=s[i]-'a';if(p->next[ch]==NULL){printf("%s",s);return;}p=p->next[ch];}if(p->flag)printf("%s",p->val);else printf("%s",s);}int main() {char a[3010],b[3010];gets(a);while(scanf("%s",a)==1){if(!strcmp(a,"END"))break;scanf("%s",b);change(b,a);}getchar();gets(a);char s[3010];while(gets(a)){if(!strcmp(a,"END"))break;int k=0;for(int i=0;i<strlen(a);i++){if(islower(a[i]))s[k++]=a[i];else{s[k]='\0';find1(s);printf("%c",a[i]);k=0;}}printf("\n");}return 0; } View Code?
轉載于:https://www.cnblogs.com/bxd123/p/10344411.html
總結
以上是生活随笔為你收集整理的What Are You Talking About HDU1075的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡按时还款为什么会逾期?大概是中了这
- 下一篇: 95561是什么银行客服电话?95561