程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> T1題(關於數組的插入與刪除的精煉算法的應用)

T1題(關於數組的插入與刪除的精煉算法的應用)

編輯:關於C語言

// T1 http://acm.swust.edu.cn/oj/problem/860/
//關於T1的分析
//這道題用鏈表顯得大材小用了,因為本身就是小數目操作
#include <stdio.h>
#include <string.h>
//char str[105], cmd[6], ch[6];
//之所以 cmd 用數組是因為 "END" 的接收需要,而且 %c 的輸入格式會接收 '\n'
//之所以 ch 用數組是因為 %c 的輸入格式會接收 '\n'
//3或者6或者1都是可以的
char str[105], cmd[3], ch[1];


int main()

{
  int i, j, k, l;
  //考慮到題意是多組操作
  while(scanf("%s", str) == 1)
  {
    while(scanf("%s", cmd) == 1 && strcmp(cmd, "END") != 0)
    {
      scanf("%s", ch);
      l = strlen(str);
      if(cmd[0] == 'A') //A操作
      {
        scanf("%d", &k);
        --k;
        if(k > l) k = l;
//////////////////////////////////////////////////////////////////////////
      //這是一段不錯的代碼,有著不錯的思想
      //很適合小數目操作,但對於大數目,就不好了
      //前面的後移, 騰出要插入元素的位置
      // i 是最後一個元素下標
        for(i = l - 1; i >= k; --i)
          str[i+1] = str[i];
//////////////////////////////////////////////////////////////////////////
        str[k] = ch[0];
        str[++l] = '\0';//結束標識需要加上

      }else

      { //B操作

//////////////////////////////////////////////////////////////////////////
       //這是以一段優秀的代碼,有著優秀的思想
      //很適合小數目操作,但對於大數目,就不好了
      //很優秀的處理了元素的查找並刪除並移位
        for(i = j = 0; i < l; ++i)
        {
          if(str[i] != ch[0])
          str[j++] = str[i];
        }
        str[j] = '\0';
//////////////////////////////////////////////////////////////////////////
      }
    }
    puts(str);
  }
  return 0;
}

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