Как мне остаток строки после определенного символа в C - PullRequest
2 голосов
/ 27 сентября 2019

Я хочу получить остаток строки после первого символа "/".

Ожидание, которое я хочу получить:

index / homepage / component.html / sdfsdf

int main(int argc, char *argv[]){
    char link[] = "www.google.com/index/homepage/component.html/sdfsdf";    

    char *token;
    char *temp[1000];

    int i=0;

    token = strtok(link, "/");
    while(token != NULL){

        temp[i] = token;
        token = strtok(NULL, "/");
        ++i;
    }



    printf("the parse string: %s\n",*temp);

    return 0;
}

the parse string: www.google.com

Ответы [ 3 ]

2 голосов
/ 27 сентября 2019

Поскольку у вас есть один целевой символ, который вы ищете в более длинной строке, чтобы найти первое вхождение, вы можете просто использовать strchr, чтобы вернуть указатель на желаемый символ в большей строке.В этом случае первый '/'.Чтобы использовать strchr для поиска указателя, связанного с первым '/', ваш вызов будет просто:

char *p = strchr (link, '/');

Если p не NULL, то он был найден в строке.Напомним, что найденный символ был символом-разделителем, который не нужен, поэтому вы перемещаете указатель на 1, чтобы он указывал на первый символ после '/'.

Простого вызова strlen() вэта точка скажет вам, сколько символов вы должны скопировать из link в вашу строку, где вы сохраняете результаты.Затем, используя длину, вы можете просто вызвать memcpy для копирования из link, начиная с позиции указателя и до конца строки (включая символ , заканчивающийся нулем ), чтобы получить нужные символы.Краткий пример:

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

#define MAXTOK 2048

int main (void) {

    char link[] = "www.google.com/index/homepage/component.html/sdfsdf",
        *p = link,
        token[MAXTOK];              /* declare array to hold results */

    if ((p = strchr (link, '/'))) { /* check whether '/' found in line */
        size_t len = strlen (++p);  /* advance pointer by 1, get length */
        if (len > MAXTOK - 1) {     /* check if length exceeds available */
            fputs ("error: string exceeds allowable length.\n", stderr);
            return 1;
        } 
        memcpy (token, p, len + 1); /* copy remaining part of string */
        printf ("%s\n", token);     /* output it */
    }
}

Пример использования / Вывод

$ ./bin/charstr_rest
index/homepage/component.html/sdfsdf

Предоставление нужной строки результата.Посмотрите вещи и дайте мне знать, если у вас есть вопросы.

2 голосов
/ 27 сентября 2019

В других ответах описан более предпочтительный метод, то есть strchr(), но для полноты картины это можно сделать, используя регулярные выражения и sscanf.

.захват всего до '/' и игнорирование его с помощью% * [^ /] (* означает, что он не поместит его в переменную), затем с другой стороны от '/' просто получим все до конца строки charударил% [^ \ n]

#include <stdio.h>

char link[] = "www.google.com/index/homepage/component.html/sdfsdf";   

int main(int argc, char **argv){
    char buff[128];

    // Seporate string after first "/"
    // %*[^/] goes untill it finds '/' and stops, but wont put it in a var
    // "/" will eat the '/' charater
    // %[^\n] goes untill it finds the '\n' char and puts it into buff
    sscanf(link, "%*[^/]/%[^\n]", buff);

    printf("%s\n", buff);
}

edit: добавлено уточнение '*'

0 голосов
/ 27 сентября 2019

Надеюсь, что это поможет. Сначала выясните положение символа '/' в строке, затем постройте свою подстроку, упомянув в каждом блоке кода, что она делает ...

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char link[] = "www.google.com/index/homepage/component.html/sdfsdf";    
    char linktemp[50];
    int i=0,c=0;


    ////Finding the Position of First '/'
    for(i=0;i<strlen(link);i++)
    {
        if(link[i]=='/')
        {
            break;
        }
    }

    //If no '/' Character found
    if(i==strlen(link))
    {
        printf("No '/' Character found in the String");
        return 0;
    }

    ////Creating the Substring
    while(c<strlen(link)-i)
    {
    linktemp[c]=link[i+c+1];
    c++;
    }
    linktemp[c] ='\0';

    printf("the parse string: %s\n",linktemp);

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