C - Массив слов - PullRequest
       21

C - Массив слов

4 голосов
/ 02 декабря 2010

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

В C мне нужно создать массив, чтобы каждый элемент соответствовал слову.

РЕДАКТИРОВАТЬ: Я только что вспомнил, что я должен сделать что-то с массивом указателей. Что-то вроде этого я и делаю ...

main()
{
    char *line[MAXLINE];   // This points to the beginning of words in compare[]
    char compare[MAXLINE]; // This is where the words will be read in
    int  counter[MAXLINE]; // Counter for the words that appear more than once
    char c;
    int i = 0;
    int n;

    for (n=0; c!=EOF; n++){
        while ((c=getchar())!=' '||c!='\n'||c!=EOF){
            compare[i]=c;
            i++;
        }
        line[n]=compare;
        i = 0;
    }

Я знаю, что это не все, потому что мне нужно сравнить новый адрес, как можно предложить это? Нужно ли использовать структуры или есть другой способ? Должен ли я использовать malloc для этого?

Я прошу прощения, если я задал глупый вопрос. Так как это мой первый пост здесь, любая информация о том, как я задал этот вопрос, очень ценится, так как я уже невероятно уважаю это сообщество и не хочу портить его глупыми вопросами. О, вход по самому вопросу также приветствуется:)

Спасибо, Slashstar

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

что-то вроде этого должно работать (linux) для окон, которые необходимо удалить \ r в конце

char buf[MAXLINE];
char** wordsz = malloc( MAXNUMBEROFWORDS * sizeof(char*) );
int wordCount = 0;
while (fgets( buf, MAXLINE, stdin )!=NULL && wordCount<MAXNUMBEROFWORDS)
{
   int len = strlen(buf); 
   if ( buf[len-1] == '\n' ) buf[len-1]='\0';
   wordsz[wordCount] = malloc( strlen(buf) + 1 );// assuming sizeof(char)==1 + \0
   strcpy(wordsz[wordCount++], buf);
} 

fgets возвращает NULL, когда вы нажимаете EOF, вы не можете перезаписать память, если вводите слишком длинную строку, как в scanf, и вы выделяете только то пространство, которое вам действительно нужно (часть из MAXNUMBEROFWORDS)

1 голос
/ 02 декабря 2010

Используйте scanf и петлю do..while:

int counter = 0, i;
int length = 15;
char *wordz[length];

do {
    printf("Enter word number %d:", counter+1);
    char *temp = (char *) malloc(sizeof(char*));
    scanf("%s", temp);
    if(temp) {
        wordz[counter++] = temp;
    }       
} while(counter < length);

for(i = 0; i < length; i++) {
    printf("\nWord number %d is %s", i+1, wordz[i]);
    free(wordz[i]); //we malloc'd in the do statement above, so we must free the memory...
}

Для справки, это решение работает.

Снимок экрана: (в этом случае установите переменную длины на 5)


alt text

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