извлечение всего до подстроки встречается C - PullRequest
2 голосов
/ 27 февраля 2012

Мне было интересно, есть ли способ извлечь все, прежде чем я найду определенное слово в строке. Строка, которую я создал, была неправильно размещена, а затем заполнена. Я хочу создать новую строку со всем перед определенной подстрокой, так что

String1 = "Мне нужен кофе"

как мне извлечь все перед кофе?

Есть идеи?

Спасибо

Ответы [ 4 ]

2 голосов
/ 27 февраля 2012

Конечно, вы можете использовать strstr() для этого:

const char *substring = strstr(string1, "coffee");

if (substring) {
    size_t len = substring - string1;
    char *string2 = malloc(len + 1);

    if (string2) {
        memcpy(string2, string1, len);
        string2[len] = 0;

        /* Do something with string2 */
    }
}
2 голосов
/ 27 февраля 2012

Используйте strstr, чтобы найти подстроку, и strncpy с битовой арифметикой указателя (n = startOfPrefix - startOfString), чтобы скопировать префикс в новый буфер,не забудьте завершить новую строку с нуля.

Если вы просто хотите выбросить подстроку и все, что после нее, вы можете просто установить местоположение, возвращаемое strstr в '\0', чтобы завершить строкуесть.

0 голосов
/ 27 февраля 2012

Вы можете использовать strstr , чтобы найти вхождение подстроки.Затем вы можете использовать strncpy , чтобы скопировать необходимое вам количество символов.

   char str[] = "I need coffee";
   char dest[255];
   int num =strstr(str,"coffe") - str ;
   strncpy(dest,str,num);
0 голосов
/ 27 февраля 2012

Вы можете использовать KMP , чтобы найти вхождение строки, а затем извлечь все до этого индекса.

...