首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查数组是否已满,是否为数组大小的两倍/一半?

如何检查数组是否已满,是否为数组大小的两倍/一半?
EN

Stack Overflow用户
提问于 2016-03-05 02:17:30
回答 1查看 557关注 0票数 1

这个程序从一个文本文件中读取信息,将其存储在一个数组中,并执行3个函数中的一个。我需要能够检查数组是否已满,如果是,则为数组大小的两倍,如果是数组大小的1/4,则为其大小的一半。尽量简短,所以如果你需要更多信息,请让我知道。

代码语言:javascript
复制
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

struct info{
  char letter;
  string SSN;
  string firstName;
  string lastName;
};

void insertion(int &count, int &validInsertationCount, string &SSN, char &letter, string &firstName, string &lastName, info *list);
void deletion(int &count, int &validDeletionCount, string &SSN, char &letter, string &firstName, string &lastName, info *list);
void retrieval(int &count, int &validRetrievalCount, string &SSN, string &firstName, string &lastName, info *list);

int main(int argc, char* argv[]){

  int arraySize = 1000;
  struct info list[1000];
  fstream input(argv[1]);
  int count = 0;
  int validInsertationCount = 0;
  int validDeletionCount = 0;
  int validRetrievalCount = 0;
  while(!input.eof()){
    input >> list[count].letter >> list[count].SSN >> list[count].firstName >> list[count].lastName;

    if(list[count].letter == 'i'){
      insertion(count, validInsertationCount, list[count].SSN, list[count].letter, list[count].firstName, list[count].lastName, list);
    }
    else if(list[count].letter == 'd'){
      deletion(count, validDeletionCount, list[count].SSN, list[count].letter, list[count].firstName, list[count].lastName, list);
    }
    else if(list[count].letter == 'r'){
      retrieval(count, validRetrievalCount, list[count].SSN, list[count].firstName, list[count].lastName, list);
    }
    count++;
  }
  input.close();

  int numberOfItems = validInsertationCount - validDeletionCount;

  cout << "The Number of Valid Insertation: " << validInsertationCount << endl;
  cout << "The Number of Valid Deletion: " << validDeletionCount << endl;
  cout << "The Number of Valid Retrieval: " << validRetrievalCount << endl;
  cout << "Item Numbers in the array: " << numberOfItems << endl;
  cout << "Array Size is: " << arraySize  << endl;
  //cout << "Time Elapsed: " <<  <<endl;                                                                                                                     
}
void insertion(int &count, int &validInsertationCount, string &SSN, char &letter, string &firstName, string &lastName, info *list){
  for(int i = 0; i < count; i++){
    if(SSN == list[i].SSN && list[i].letter == 'i'){
      for(int k = i; k < count; k++){
      list[k].SSN = list[k+1].SSN;
      list[k].letter = list[k+1].letter;
      list[k].firstName = list[k+1].firstName;
      list[k].lastName = list[k+1].lastName;
      }
      count--;
      return;
    }
  }
  validInsertationCount++;
  return;
}
void deletion(int &count, int &validDeletionCount, string &SSN, char &letter, string &firstName, string &lastName, info *list){
  for(int i = 0; i < count; i++){
    if(SSN == list[i].SSN && firstName == list[i].firstName && lastName == list[i].lastName){
      for(int k = i; k < count; k++){
      list[k].SSN = list[k+1].SSN;
      list[k].letter = list[k+1].letter;
      list[k].firstName = list[k+1].firstName;
      list[k].lastName = list[k+1].lastName;
      }
      count--;
      validDeletionCount++;
      return;
    }
  }
}
void retrieval(int &count, int &validRetrievalCount, string &SSN, string &firstName, string &lastName, info *list){
  for(int i = 0; i < count; i++){
    if(SSN == list[i].SSN && firstName == list[i].firstName && lastName == list[i].lastName){
      validRetrievalCount++;
    }
  }
  return;
}
EN

回答 1

Stack Overflow用户

发布于 2016-03-05 02:39:41

您不能简单地调整静态分配数组的大小,因此您需要使用std::vectormalloc/new来分配动态数组。但是,在这种情况下,您不能使用sizeof()确定数组的大小。因此,您要么保留一个大小变量,要么使用“分隔符”值来精确定位数组的末尾。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35803257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档