C语言-----文件操作训练之字符串查找

#include 
#include 
#include 

//从终端接收字符串 返回这个字符串的首地址
char *inputName(){
 //1.定义一个指针变量 指向字符串的首地址
char *pName = NULL;
  //2.接收输入
  int i = 0;
//3.提示操作
 printf("请输入人名:");
while (1) {
 //接收一个字符
  char c = getchar();
//判断这个字符是不是\n
  if (c == '\n') {
 //输入结束
   break;
 }
 //判断是不是第一个字符
  if(i == 0){
 //使用malloc分配内存
       pName = (char *)malloc(1*sizeof(char));
      //判断是否分配成功
       if(pName == NULL){
          exit(EXIT_FAILURE);
       }
       pName[0] = c;
   }else{
   //使用realloc在之前的基础上加一个
   pName = realloc(pName, (i+1)*sizeof(char));
 //判断是否分配成功
   if(pName == NULL){
   exit(EXIT_FAILURE);
   }
     pName[i] = c;
  }

   i++;
 }
 //将当前的字符串首地址返回
return pName;
}

//是否继续
bool isContinue(){
  printf("是否继续(y/n)?:");
   while (1) {
      char c = getchar();
      getchar();
      if (c == 'y'){
       return true;
      }else if(c == 'n'){
   return false;
   }else{
       printf("输入格式不对,请重新输入:");
   }
  }
}
//初始化整个数组
char **initNames(int *pNum){
 //1.定义指针变量指向每个名字的首地址的内存
    char **pHead = NULL;

   //2.记录元素个数
     int i = 0;
     while (1) {
 //判断是不是第一个
//第一个使用malloc分配内存
     if (i == 0) {
       pHead = malloc(1*sizeof(char *));
     if (pHead == NULL) {
       exit(EXIT_FAILURE);
      }

          //输入人名 将地址放到pHead对应位置
        pHead[0] = inputName();
  }else{
    //使用realloc重新再增加一个元素
  pHead = realloc(pHead, (i+1)*sizeof(char *));
   if (pHead == NULL) {
      exit(EXIT_FAILURE);
          }
        //输入人名 将地址放到pHead对应位置
      pHead[i] = inputName();
   }

      i++;
    
  //是否继续
    bool result = isContinue();
    if (result == false) {
    break;
    }
}

   *pNum = i;
    return pHead;
}

void show(char **pHead, int num){
    printf("输入%d个名字:\n",num);
    for (int i = 0; i < num; i++) {
       printf("%s\n",pHead[i]);
     }
    printf("\n");
}

int main(int argc, const char * argv[]) {
    char **pHead = NULL;
    int count = 0;
    pHead = initNames(&count);
    show(pHead, count);
    return 0;
}

你可能感兴趣的:(C语言-----文件操作训练之字符串查找)