2014-04-29 56 views
0

給定一個表示記錄行號的整數值(從0 開始,以當前大小1結尾),刪除學生記錄,向上移動電子表格中的所有以下記錄一個 行。如果用戶輸入了一個超出範圍的整數(< 0或> = size),則 提示「沒有這樣的行。不能刪除行??」替換?行號。向下移動數組值1

我不知道代碼有什麼問題。它不會移動有關它的數組信息1;

void drop(string names[], int sections[], int grades[], int size){ 
    int i; 
    int drop; 
    cin >> drop; 
    if (drop > size){ 
     cout << "No such row. Can not drop row" << drop << " /n"; 

    }else{ 
     for (i = 0; i <= drop; i++){ 
      if (i == drop){ 
       names[drop] = {""}; 
       sections[drop] = {}; 
       grades[drop] = {}; 
       for (i = drop; drop < size-1; i++){ 
        names[i] = names[i + 1]; 
        sections[i] = sections[i + 1]; 
        grades[i] = grades[i + 1]; 
       } 
      } 

     } 

    } 
} 
+0

謝謝。非常有幫助 – DaneelD

回答

1

試試這個:

void drop(string names[], int sections[], int grades[], int size){ 
    int i; 
    int drop; 
    cin >> drop; 
    if (drop >= size){  //NOTE: >=, not > 
     cout << "No such row. Can not drop row" << drop << " /n"; 
     return; 
    } 
    for(i=drop; i<size-1; i++) 
     names[i] = names[i + 1]; 
     sections[i] = sections[i + 1]; 
     grades[i] = grades[i + 1]; 
    } 
} 

}

當然,如果你想改變數組的大小,這將是更好地使用向量。

但是,您不能執行以下操作,因爲name_of_array [drop]是數組中的元素,而不是數組中的數組。無論哪種情況,這都是非法代碼。

names[drop] = {""};  //should be names[drop] = ""; 
sections[drop] = {};  // '' '' sections[drop] = 0; 
grades[drop] = {};  // '' '' grades[drop] = 0; 
1

更改線路

  for (i = drop; drop < size-1; i++){ 

  for (i = drop; i < size-1; i++){ 

else塊下的代碼可以進一步簡化爲:

  for (i = drop; i < size-1; i++){ 
       names[i] = names[i + 1]; 
       sections[i] = sections[i + 1]; 
       grades[i] = grades[i + 1]; 
      } 

你不需要在此之前的線路。

0

您對使用標準庫算法有何感想?您可以使用以下原料代替循環:

void drop(string names[], int sections[], int grades[], int size) { 
    int drop; 
    cin >> drop; 
    if (drop >= size) { 
     cout << "No such row. Can not drop row" << drop << " \n"; 
    } else { 
     std::move( &names[drop + 1], &names[size], &names[drop]); 
     std::move(&sections[drop + 1], &sections[size], &sections[drop]); 
     std::move( &grades[drop + 1], &grades[size], &grades[drop]); 
    } 
} 

如果你的編譯器不支持C++ 11只是改變std::movestd::copy在上面的代碼。