程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> UVA - 123 Searching Quickly

UVA - 123 Searching Quickly

編輯:C++入門知識

UVA - 123 Searching Quickly


題目鏈接

這道題就是給定 一系列ignore詞(全部是小寫),以::結尾 然後 輸入一系列文本,每行不包括ignore詞的作為關鍵詞,(與ignore詞比較不區分大小寫) ,然後排序輸出。每一行中可能出現幾個關鍵詞,那就以出現順序先後輸出,如果有幾行包括了同一個關鍵詞,就以輸入時順序輸出,其余的按照字典序排序輸出。輸出的時候時候除了關鍵詞大寫外,其余都要小寫。

這道題做的時候有點長,不過幸好1A。

我的思路是先把文本全部轉化為小寫,然後取出關鍵詞,同時保存它的初始位置在哪一行以及在這一行出現的位置,然後對關鍵詞排序,輸出的時候把對應關鍵詞做一個標記,為大寫。對應輸出就好。

#include
#include
#include
#include
struct node
{
    char s[10000];
    int index,p;
}word[10000];  //存儲關鍵詞  初始在哪一行   在行中的位置
int cmp(const void* _a,const void* _b)
{
    struct node* a=(node*)_a;
    struct node* b=(node*)_b;
    if(strcmp(a->s,b->s)==0&&a->index!=b->index) return a->index - b->index;
    else if(strcmp(a->s,b->s)==0&&a->index==b->index) return a->p - b->p;
    else return strcmp(a->s,b->s);
}    //先按 初始行下標排序,然後在按 位置排 最後按 字典序排
char s1[100][150]; //ignore
char s2[250][10000]; //title
char str[10000]; //臨時保存關鍵詞
bool ans[10000]; //標記數組
int main()
{
    //freopen("a.txt","r",stdin);
    int n=0,m=0,i,j,x=0,jj;
    while(~scanf("%s",s1[n]))
    {
        if(strcmp(s1[n],"::")==0) break;
        n++;
    }
    getchar();
   // for(i=0;i='A'&&s2[i][j]<='Z') s2[i][j]+=32;
        }
    }
   /* for(i=0;i='a'&&s2[i][j]<='z') str[k++]=s2[i][j];
            else
            {
               //printf("%s\n",str);
                flag=0;
                for(jj=0;jj

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved