Поскольку вы решили фактический разбор строки, ваш последний комментарий я приму в качестве фактического требования.
"... Я хочу создать список слов различной длины, к которым могут обращатьсяindex ... "
Эту задачу, конечно, нелегко решить, если" три недели в C ".Структура данных, представляющая, что это main()
второй аргумент:
// array (of unknown size)
// of pointers to char
char * argv[] ;
Это можно записать как указатель на указатель:
// same data structure as char * []
char ** list_of_words ;
И это толкает вас прямо вглубокие воды C. Нетривиальная структура данных C.Таким образом, это может потребовать чуть более четырех недель C.
Но мы можем быть творческими.Существует «встроенная в C» одна нетривиальная структура данных, которую мы могли бы использовать.Файл.
Мы можем записать слова в файл.Одно слово, одна строка.И это наш вывод: список слов, разделенных символом новой строки, хранится в файле.
Мы можем даже представить и написать функцию, которая будет читать слово из этого результата «по индексу».Как вам (кажется) нужно.
// hint: there is a FILE * behind
int words_count = result_size () ;
const char * word = result_get_word(3) ;
Теперь я смело пошел вперед и написал «все», кроме этой последней «решающей» части.В конце концов, я уверен, что вы тоже хотели бы внести свой вклад.
Таким образом, рабочий код (за вычетом result_size) и result_get_word ()) здесь жив и работает: https://wandbox.org/permlink/uLpAplNl6A3fgVGw
Чтобы избежать«Гнев хана» я также вставил здесь:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
/*
task: remove all non alpha chars from a given string, store the result
*/
int process_and_save (FILE *, const char *) ;
int dump_result(FILE *) ;
int main( const int argc, const char * argv[] )
{
const char * filename = "words.txt";
const char * to_parse = "0abra123ka456dabra789" ;
(void)(&argc) ; (void)argv ; // pacify the compiler warnings
printf("\nInput: %s", to_parse ) ;
int retval = process_and_save(fopen(filename, "w"), to_parse ) ;
if ( EXIT_FAILURE != retval )
{
printf("\n\nOutput:\n") ;
retval = dump_result(fopen(filename, "r"));
}
return retval ;
}
int process_and_save (FILE * fp, const char * input )
{
if(!fp) {
perror("File opening failed");
return EXIT_FAILURE;
}
//
char * walker = (char *)(input) ;
while ( walker++ )
{
if ( ! *walker ) break ;
if ( isalpha(*walker) ) {
fprintf( fp, "%c", *walker ) ;
// I am alpha but next one is not
// so write word end, next
if ( ! isalpha(*(walker +1) ) )
fprintf( fp, "\n" ) ;
}
}
fclose(fp);
return EXIT_SUCCESS;
}
int dump_result(FILE* fp )
{
if(!fp) {
perror("\nFile opening failed");
return EXIT_FAILURE;
}
int c; while ((c = fgetc(fp)) != EOF) { putchar(c); }
if (ferror(fp))
puts("\nI/O error when reading");
fclose(fp);
return EXIT_SUCCESS;
}
Я думаю, что это функционально и выполняет работу по анализу и сохранению результата.Не в сложной структуре данных, а в простом файле.Остальное должно быть легко.Если нужна помощь, пожалуйста, дайте мне знать.