1. 程式人生 > >NYOJ 1307 Linux的檔案許可權對不對?

NYOJ 1307 Linux的檔案許可權對不對?

Linux的檔案許可權對不對?

時間限制: 1000 ms  |  記憶體限制: 65535 KB 難度: 2
描述
在還沒給deepin做dde的arch移植之前,felixonmars迷上了Linux的命令列,因為這看起來特別炫,不用滑鼠、只是在鍵盤裡輸入字元也能使用電腦。雖然介面在發展,但是felixonmars還是很努力地學習使用純字元的命令。 最近cxbii小浣熊和jingle格格巫教會了felixonmars兩個命令(假設felixonmars已經在 /home 目錄下新建了一個 ACM.txt 的檔案。)
(一)ls -l ACM.txt (二)chmod 【***】 ACM.txt

 第一個命令會顯示ACM.txt這個檔案的屬性。【r】指“讀”許可權,【w】指“寫”許可權,【x】指“執行”許可權,【-】指沒有任何許可權。 顯示的結果例如“-rw-rw-r--”,從第二個字元開始,每三個字元為一組,第一組是felixonmars的許可權,第二組是felixonmars所屬組的許可權,第三組是其他人的許可權。(第一個字元必須是‘-’) 第二個命令可以改變檔案的許可權,【***】指一個三位數。第一個數字指felixonmars的許可權,第二個指felixonmars所屬組的許可權,第三個指其他人的許可權。 數字與許可權表示的對應關係如下(注意沒有 --- = 0 的對應關係) r-- = 4  -w- = 2  --x = 1  rw- = 6  r-x = 5  -wx = 3  rwx = 7
輸入
輸入檔案的第一行是一個整數T,表示有T組資料。 接下來是T組資料,每個資料有兩行,第一行是命令(二)中的數字,第二行是表示檔案許可權的字串。
輸出
數字和字串表示含義一致,則輸出“Yes”(不帶雙引號),否則輸出“No”
樣例輸入
4
666
-rw-rw-rw-
777
wrwxrwxrwx
888
-r--r--r--
111
-r--r--r-x
樣例輸出
Yes
No
No
No


犯了低階錯誤,糾纏了很久,


#include<iostream>
#include<map>
using namespace std;
int main() {
  map<int, string> p;
  p[4] = "r--"; p[2] = "-w-"; p[1] = "--x"; p[6] = "rw-";
  p[5] = "r-x"; p[3] = "-wx"; p[7] = "rwx";
  int n;
  cin >> n;
  while(n--) {
    int mark = 1;
    string letter, s, num;
    cin >> num >> letter;
    if(letter[0] != '-') mark = 0;
    else {
      for(int i = 1, j = 0; i < letter.size(); i += 3) {
        if(p[num[j]-'0'] != letter.substr(i, 3))
          mark = 0;
        j++;
      }
    }
    if(mark) cout << "Yes" << endl;
    else cout << "No" << endl;
  }
}