2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Работа со строками [C]
Сообщение24.06.2018, 11:48 
Здравствуйте. Вот написал такую программу, но неверно считает результат. То есть должно так:

hi hi apple street street
hi: 2 apple: 0 street: 2

Но в моем случае:
hastreet: 1: 0: 1

Что не так?
код: [ скачать ] [ спрятать ]
Используется синтаксис C
//Дана строка в стиле Си. Группы символов, разделенные пробелами(одним или несколькими)
//и не содержание пробелов внутри себя, будем называть словами.
//Для каждого из слов указать сколько раз оно встречается среди всех слов данной строки.
#include <stdio.h>
#include <string.h>
int f(char* w, char* words, int words_n, int counters[]){ // добавлять слово в список слов, если оно новое,
// и увеличивать его счетчик, если оно не новое
// проверить, есть ли w в words и если есть, запомнить номер
     int found_n = -1;
     for(int i =0; i<words_n ; i++)
     if(strcmp(&words[i], w) == 0){
         found_n = i;
}
     if(found_n == -1){ // добавить
     strcpy(&words[words_n], w);
     return words_n + 1;
 }
     else{ // прибавить к нужному счетчику 1
     counters[found_n]++;
     return words_n;
}
}


void iterate_words(char *s){ // должна вызывать f от каждого слова
       
        char words[80][100];
    int counters[80];
    int words_n = 0; //
    char word[100];
    int pos = 0;
    for(int i=0; s[i]!='\0'; i++){
        if(s[i] == ' ' ){
                word[pos] = '\0';
                if(pos > 0){
                        words_n=f(word, *words, words_n, counters);
                        pos=0;
}
}
   else{
       word[pos]=s[i];
       pos++;
}
}
  if(pos > 0)
        words_n = f(word, *words, words_n, counters);
// здесь вывести все значения words и counters: apple: 10
   for(int i=0; i<words_n; i++)
   printf("%s: %d ", words[i], counters[i]);

}

int main(){
        char s[8000];
    puts("введите строку");
    gets(s);
    iterate_words(s);
    return 0;
}

 

 
 
 
 Re: Работа со строками
Сообщение24.06.2018, 11:57 
Аватара пользователя
Вам нужно написать функцию типа
а пока вы работаете только с первым элементом массива iterate_words::words.

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group