2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Работа со строками [C]
Сообщение24.06.2018, 11:48 


18/12/17
11
Здравствуйте. Вот написал такую программу, но неверно считает результат. То есть должно так:

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 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Вам нужно написать функцию типа
а пока вы работаете только с первым элементом массива iterate_words::words.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group