Как извлечь строку, используя две косые черты
У меня есть строка, которая всегда имеет две косые черты как /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 /