Передача параметров в функцию - C (СИ) (71329)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Пишу аналог функции strtok. Начал на с++ и написал код:
char *mstrtok(char * &str1, const char *str2)
{
    char *str3;
    
    if (str1 == NULL)
        return NULL;
    
    while (*str1 != '\0' && *str1 == *str2)
        str1++;
    
    str3 = str1;
 
    while (*str1 != '\0' && *str1 != *str2)
        str1++;
    
    if (*str1 != '\0')
    {       
        str1 = str1++;
        str1[-1] = 0;       
    }
    else
    {
        str1 = NULL;        
    }
 
    return str3;
}
Потом решил, всё это дело переписать на Си, но возникла проблема, вот этот параметр:
char * &str1
компилятор Си отказывается принимать, подскажите, пожалуйста, как это дело уладить. p.s. str1 должна сохранять все изменения которые она претерпела в функции. Приведенный выше код полностью рабочий на C++. То что mstrtok не совсем strtok, на это внимание можете не обращать. Заранее спасибо за ответы.

Решение задачи: «Передача параметров в функцию»

textual
Листинг программы
char *mstrtok(char **str1, const char *str2)
{
    char *str3;
    
    if (*str1 == NULL)
        return NULL;
    
    while (**str1 != '\0' && **str1 == *str2)
        (*str1)++;
    
    str3 = *str1;
    ...

Объяснение кода листинга программы

  1. В функции mstrtok принимаются два параметра: str1 и str2.
  2. Переменная str3 инициализируется значением *str1.
  3. Проверяется, является ли *str1 равным NULL. Если это так, то функция возвращает NULL.
  4. В цикле происходит проверка, равен ли символ, на который указывает *str1, нулю или символу, на который указывает str2. Если это так, то *str1 увеличивается на 1.
  5. После цикла str3 содержит подстроку, начинающуюся с первого символа, не совпадающего с последним символом в str2.
  6. Возвращается значение str3.
  7. ... (продолжение реализации функции не указано в предоставленном коде)

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы