Примечание: как уже упоминалось, strtok()
не подходит для строковых литералов, и в этом случае вам следует go с ответом Чукса (strcspn
), но если это не проблема, и Вы можете работать со строками, хранящимися в массивах, а затем продолжить чтение. Последним средством было бы работать с копией строкового литерала.
Сначала вы должны решить, какую структуру данных вы будете использовать для своего набора (например, простой связанный список, где вы проверяйте перед вставкой дубликаты).
Затем используйте strtok()
для вашей строки, и если текущий токен отличается от "AND"
(или любой другой строки, которую следует игнорировать - вы у меня также будет набор игнорируемых строк), затем вставьте его в набор, в противном случае перейдите к следующему токену.
Вот базовый c Завершить минимальный пример, чтобы начать работу. :
#include <stdio.h>
#include <string.h>
#define N 3 // Max size of set
#define LEN 32 // Max length of word - 1
int main ()
{
char set[N][LEN] = {0};
char* ignore_str = "AND";
char str[] ="Hello AND test AND test2";
char* pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ");
int i = 0;
while (pch != NULL)
{
printf ("%s\n",pch);
if(strcmp(pch, ignore_str))
strcpy(set[i++], pch);
pch = strtok (NULL, " ");
}
printf("My set is: {");
for(int j = 0; j < i; ++j)
printf("%s, ", set[j]);
printf("}\n");
return 0;
}
Вывод:
Splitting string "Hello AND test AND test2" into tokens:
Hello
AND
test
AND
test2
My set is: {Hello, test, test2, }
Здесь я использовал массив для представления набора, предполагая, что максимальный размер набора будет равен 3. Конечно, вы можете использовать вместо этого используется больше динамический c (например, динамический c выделенный памяти массив или список).