Проверьте, существует ли подстрока в строке в C

Проверенные исключения Java заставляют программистов решать такие проблемы. (На мой взгляд, это хорошо, даже если подметать под ковром легче.)

Вы должны предпринять соответствующие действия, если произойдет сбой. Как правило, обработка должна быть на другом уровне, от которого было выбрано исключение.

Ресурс должен обрабатываться правильно, который принимает форму:

acquire();
try {
    use();
} finally {
    release();
}

Никогда не помещайте acquire() в блоке try. Никогда не помещайте ничего между acquire() и try (кроме простого назначения). Не пытайтесь выпустить несколько ресурсов в одном блоке finally.

Итак, у нас есть две разные проблемы. К сожалению, синтаксис Java смешивает два. Правильный способ записи такого кода:

try {
    final FileOutputStream rawOut = new FileOutputStream(file);
    try {
        OutputStream out = new BufferedOutputStream(rawOut);
        ...
        out.flush();
    } finally {
        rawOut.close();
    }
} catch (FileNotFoundException exc) {
    ...do something not being able to create file...
} catch (IOException exc) {
    ...handle create file but borked - oops...
}
143
задан Peter Mortensen 2 June 2017 в 17:46
поделиться

1 ответ

Используя C - Нет созданный в функциях

string_contains () делает весь тяжелый подъем и возвращает 1 основанный индекс. Отдых является кодами помощника и драйвером.

Присваивают указатель на основную строку и подстроку, увеличивают указатель подстроки при соответствии, останавливают цикличное выполнение, когда указатель подстроки равен длине подстроки.

read_line () - Немного бонус-кода для чтения ввода данных пользователем, не предопределяя размер входного пользователя должно обеспечить.

#include <stdio.h>
#include <stdlib.h>

int string_len(char * string){
  int len = 0;
  while(*string!='\0'){
    len++;
    string++;
  }
  return len;
}

int string_contains(char *string, char *substring){
  int start_index = 0;
  int string_index=0, substring_index=0;
  int substring_len =string_len(substring);
  int s_len = string_len(string);
  while(substring_index<substring_len && string_index<s_len){
    if(*(string+string_index)==*(substring+substring_index)){
      substring_index++;
    }
    string_index++;
    if(substring_index==substring_len){
      return string_index-substring_len+1;
    }
  }

  return 0;

}

#define INPUT_BUFFER 64
char *read_line(){
  int buffer_len = INPUT_BUFFER;
  char *input = malloc(buffer_len*sizeof(char));
  int c, count=0;

  while(1){
    c = getchar();

    if(c==EOF||c=='\n'){
      input[count]='\0';
      return input;
    }else{
      input[count]=c;
      count++;
    }

    if(count==buffer_len){
      buffer_len+=INPUT_BUFFER;
      input = realloc(input, buffer_len*sizeof(char));
    }

  }
}

int main(void) {
  while(1){
    printf("\nEnter the string: ");
    char *string = read_line();
    printf("Enter the sub-string: ");
    char *substring = read_line(); 
    int position = string_contains(string,substring);
    if(position){ 
      printf("Found at position: %d\n", position);
    }else{
      printf("Not Found\n");
    }
  }
  return 0;
}
0
ответ дан 23 November 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: