Как заставить мой код возвращать пустую строку? - PullRequest
0 голосов
/ 08 мая 2020

Итак, вот реализация функции strstr в C. Итак, у меня проблема с возвратом пустой строки.

Ввод: "" и ""

Он должен возвращать не NULL:

(Ничего, просто пустая строка) Итак как это реализовать?

#include "string.h"

char *my_strstr (char *str, char *substr)
{
    char *empty = "";
    if (str == empty && substr == empty) return empty;
    while (*str) 
    {
            char *Begin = str;
            char *pattern = substr;

            while (*str && *pattern && *str == *pattern) 
            {
                  str++;
                  pattern++;
            }
            // If complete sub string match, return starting address 
            if (!*pattern)
                  return Begin;

            str = Begin + 1;    // Increament main string 
    }
    return NULL;
}

1 Ответ

0 голосов
/ 08 мая 2020

Несколько проблем:
1) Для сравнения строк нужно использовать strcmp() или реализовать свой собственный. == не может использоваться для сравнения строк и всегда будет возвращать false. Пример

char *str1="str";
char *str2="str";
if (str1==str2){
    printf("== returns true.\n");
}
if (strcmp(str1,str2)){
    printf("strcmp() returns true.\n");
}

Вывод

strcmp() returns true.

2) Нельзя возвращать указатель на локальную переменную. В этом случае return empty недопустимо.
3) Чтобы вернуть пустую строку, выполните команду

char *emptystr;
emptystr=malloc(sizeof(char));
*emptystr='\0';
return emptystr;

Обратите внимание, что здесь используется malloc вместо неправильного версия

char emptystr[1];

, которая вызывает возврат указателя на локальную переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...