2014-09-21 2 views
1

У меня есть массив, который состоит из строки слов (я использовал fgets). Теперь я хочу создать новый массив как часть той же структуры, которая содержит одни и те же строки, но разбита на слова, содержащие только буквенно-цифровые символы (так что строка [1] .word_in [3] даст мне третье слово в строке 1). У меня была небольшая попытка, но она не сработала.Разбиение линейного массива на слова

typedef struct { 
     char linewords[101]; 
     char separateword[101]; 
    } line; 

    line linenum[101]; 

    while fgets(linenum[i].linewords, 101, stdin) != NULL) { 
     i++ 
     linenum[i].separateword = linenum[i].linewords.Split(' '); 
     if (isalnum(int linenum[i].separateword) != 0) { 
      /* need to remove that character */ 
     } 
    } 

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

Редактировать: Я добавил, что я сейчас делаю; однако я получаю ошибки присваивания при назначении var.

typedef struct { 
     char linewords[101]; 
     char separateword[101]; 
    } line; 

    line linenum[101]; 
    char var[101] 
    char *strtok(char *str, const char delim); 

    while fgets(linenum[i].linewords, 101, stdin) != NULL) { 

     char* strcopy(); 
     char* strtok(); 
     strcpy(linenum[i].separateword,linenum[i].linewords); 
     strtok(linenum[i].separateword, ' '); /*this line causes seg fault*/ 
     i++ 
     } 
    } 
+0

Что вы имели в виду под этим не работало? –

+0

Я получаю следующую ошибку: «запрос для члена« Разделить »в чем-то не структуре или объединении». – KittiCat

+0

'linenum [i] .linewords.Split ('')' Вы не можете составить такой синтаксис. Если вы намереваетесь использовать C, то узнайте о C, вы не можете ожидать, что все, что работает на одном языке, волшебным образом работает на другом языке. –

ответ

0

strtok() возвращает указатель на символ. Он находится в

char *strtok(char *s, const char *delim) ; 

Таким образом, проблема заключается в том, что вы не сохраняете возвращаемое значение.

while fgets(linenum[i].linewords, 101, stdin) != NULL) { 

     //strcpy(linenum[i].separateword,linenum[i].linewords); 
     linenum[i].seperatewords=strtok(linenum[i].linewords, ' '); 
     i++ 
     } 

Это решит вашу проблему. Для получения дополнительной информации о strtok(): strtok()

Смежные вопросы