Копирование части строки в другую строку - PullRequest
0 голосов
/ 12 января 2019

У меня есть строка слов, между которыми есть разделитель слов, в другой строке я хочу поместить слова основной строки, но одно за другим, сравнить слово с какой-то другой строкой и поместить ее в массив строк.

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

void delete_words(char *words[],int n, char *sentence ){
int m=strlen(sentence);
char tmp[m];
char * str=(char*)malloc(sizeof(char)*(MAX_LEN));
int i=0,end=0,k,z;
for(k=0; k<m; k++)
{
    z=0;
    while(*sentence && sentence[i]!= WORD_SEPERATOR)
    {
        str[z]=sentence[i];
        i++;
        z++;
    }

    if(is_string_in_array(words,n,str)==false)
    {
        int len=strlen(str);
        strcpy(tmp+k,str);
        end=end+len;
        tmp[end]=WORD_SEPERATOR;
        free(str);
    }}

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

1 Ответ

0 голосов
/ 12 января 2019

Здесь select_next_word перебирает строку и пытается извлечь слова одно за другим, затем мы проверяем его по массиву, если его не существует, мы добавляем его в целевую строку

#include <stdio.h>
#include <String.h>

void select_next_word(char **buffer, char **next_word)
{
    *next_word = *buffer;
    while(**buffer != 0)
    {
        if(**buffer == '-')
        {
            **buffer = 0;
             (*buffer)++;
            break;
        }

        (*buffer)++;
    }
}

int main()
{
    #define CHECK_ARR_SIZE  2
    char check_arr[CHECK_ARR_SIZE][32] = {"this", "test"}; //make second dim large enough
    char test[] = "this-is-a-test-string";
    char dest[32]; //be sure it is large enough
    char *next_word;
    char *temp = test;

    while(1)
    {
        select_next_word(&temp, &next_word);
        int i = 0;
        int word_found = 0;
        for( ; i < CHECK_ARR_SIZE ;i++)
        {
            if(strcmp(next_word, check_arr[i]) == 0)
            {
                word_found = 1;
                break;
            }
        }

        if(!word_found)
        strcat(dest, next_word);
        if(*temp == 0)
         break;
    }

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