Премини към съдържанието

Препоръчан отговор


Тази програма 
приема като 
аргументи дадена поредица от символи и 
име на файл, а като резултат да изпечатва 
редовете, които я съдържат.
 
 
#include <stdio.h>
#include <stdlib.h>
 
int string_length(char *string)
{
  if(string == NULL)
  {
    return -1;
  }
  int length = 0;
  while(string[length] != '0')
  {
    length++;
  }
  return length;
}
 
int string_compare(char *string1, char *string2)
{
  int string1_len = string_length(string1);
  int string2_len = string_length(string2);
  if(string1_len - string2_len != 0)
  {
    return -1;
  }
  int i;
  for(i = 0; i < string1_len; i++) {
    if(string1 != string2)
    {
      return -1;
    }
  }
  return 0;
}
 
int main(int argc, char* argv[])
{
  int i = 0;
  char* pattern;
  char* fileName;
  int displayLineNumbers = 0;
  for(i = 1; i < argc; i++) {
    if(i + 1 <= argc)
    {
      if(string_compare(argv, "-x") == 0) 
      {
        displayLineNumbers = 1; 
      } 
      else if(string_compare(argv, "-p") == 0) 
      {
        pattern = argv[i+1];
      } 
      else if(string_compare(argv, "-f") == 0) 
      {
        fileName = argv[i+1];
      }
    }
  }
  FILE* fp = fopen(fileName, "r");
  if(fp == NULL) 
  {
    printf("can't open file '%s'n", fileName);
    return -1;
  }
  char c;
  char line[256];
 
  int counter2 = 0;
  int lineNumber = 1;
  while(fgets(line, sizeof(line), fp)) 
  {
    short found = 0;
    int counter = 0;
    for (counter2 = 0; counter2 < string_length(line); counter2++)
    {
      c = line[counter2];
      if(c == pattern[counter]) 
      {
        counter++;
        if(counter == string_length(pattern)) 
        {
          found = 1;
          break;
        }
      }  
      else 
      {
        counter = 0;
      }
    }
    if(found)
    {
      if(displayLineNumbers)
      {
        printf("%d: ", lineNumber);
      }
      printf("%s", line);
    }
    lineNumber++;
  }
  fclose(fp);
  return 0;
}
 
 
1.Ако може някой да редактира програмата  така че да 
работи със следните опционални аргументи 
◦ -p за подаване на поредицата символи 
◦ -n за изкарване на броя редове 
◦ -f за подаване на файла 
 
find –n –f program.c –p word 
 
Редът на опционалните параметри не трябва 
да е от значение. 
 
2. След това ако може в нова програмар  някой да  редактира програмата така че,
обработката на опционалните параметри 
да се извършва чрез функцията getopt. 
 
 
 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Прочетете моля точка 2.3 от правилата на форума!

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
Гост
Тази тема е заключена за нови отговори.

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.