Как извлечь строку, используя две косые черты

У меня есть строка, которая всегда имеет две косые черты как /709/nviTemp1Я хотел бы извлечь /709/ из этой строки и вернуть его в char*, как бы я использовал strstr для этой цели?

У меня также может быть много косых черт на пути, как /709/nvitemp1/d/s/

поэтому мне нужно только получить первый токен /709/

4 ответа

Решение

Попробуйте использовать strtok за это. strtok разбивает строку на разные токены на основе разделителя. Как это:

char str[100] = "/709/nviTemp1";
char delimiter[2] = "/";
char *result;
char *finalresult;

result = strtok(str, delimiter); // splits by first occurence of '/', e.g "709"
strcat(finalresult,"/");
strcat(finalresult, result);
strcat(finalresult,"/");
printf("%s",finalresult);

Пожалуйста, позаботьтесь о том, что strtok изменяет вашу исходную строку, которую вы ей передаете.

Вы можете попробовать что-то вроде этого:

char str[100] = "/709/nviTemp1";
char resu[100];
char *tmp;

tmp = strchr(str+1, '/');
strncpy(resu, str, (size_t)(tmp - str) + 1);
resu[(size_t)(tmp - str) + 1] = '\0';

strchr искать 1 '/', но начиная с str+1 пропускает реальный первый. Затем вычислите "размер" между началом и найденным символом "/" и используйте strncpy скопировать материал и добавить конечный '\0'.

Используйте strchr, чтобы найти первый слеш. Продвиньте указатель и найдите второй слеш. Переместите указатель и установите '\0',

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

int main (int argc , char *argv[]) {
    char *tok;
    char text[] = "/709/nvitemp1/d/s/";

    if ( ( tok = strchr ( text, '/')) != NULL) {//find first /
        tok++;
        if ( ( tok = strchr ( tok, '/')) != NULL) {//find second /
            tok++;
            *tok = '\0';
            printf ( "%s\n", text);
        }
    }
    return 0;
}

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

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

int main()
{
    char *str = "/709/nviTemp1";
    char *delims = "/";
    char *strCopy;

    char *tmpResult;

    strCopy = strdup(str);
    tmpResult = strtok(strCopy, delims);

    // +1 for the first slash, +1 for the second slash, + another for the terminating NULL
    char *finalResult = (char*)calloc(strlen(tmpResult) + 3, 1);

    strcat(finalResult, "/");
    strcat(finalResult, tmpResult);
    strcat(finalResult, "/");

    free(strCopy);

    printf("%s",finalResult);
}

Выход:

/ 709 /

Другие вопросы по тегам