2013-10-10 4 views
0

Я работаю над созданием строковых (char *) функций манипуляции в C, а моя последняя - это подстрочная функция, подобная PHP. Я отправляю сообщения, чтобы другие могли извлечь из этого выгоду, и я был бы благодарен за любые предложения по улучшению функции.PHP-подобная функция подстроки для C

ответ

0

Вот функция подстрока PHP в C.

char *substr(char *str, int start, int num) 
{ 
    //find string length 
    int len = sj_strlen(str); 

    char *result; 

    //Return "" if start is longer than str 
    if(start > len || (start*-1) > len) 
    { 
     result = malloc(1); 
     *result = '\0'; 
     return result; 
    } 

    //Setting pointer to appropriate position 
    if(start >= 0) 
    { 
     str += start; 
    } 
    else 
    { 
     str += (len+start); 
    } 

    //Allocate space for returned substring 
    result = malloc(num+1); 
    char *ptr = result; 

    //Adding characters to the result 
    while(num > 0 && *str) 
    { 
     *ptr++ = *str++; 
     num--; 
    } 

    //Terminating character 
    *ptr = '\0'; 

    return result; 
} 

int main() 
{ 
    char *str = "Hello, world!"; 
    printf("%s\n",substr(str,-10,2)); //outputs lo 
    printf("%s",substr(str,7,5)); //outputs world 
} 
+0

не 'тетсру()' лучший вариант, чем цикл по каждому символу? – bansi

+1

Возможно, вы хотите проверить, запущен ли он> len. И str == 0. И возвращаем значение malloc. –

+1

Теперь у вас есть возврат с "", а другой - из malloc(). Если пользователь пытается освободить() результат «», который не будет хорош. Кроме того, нужно справиться с запуском <-len. Может быть, использовать if (abs (start)> len) return strdup (""); –

Смежные вопросы