Предмет: Информатика, автор: thenp

На СИ. Срочно. 100 баллов
Определить стоимость телеграммы, если известно, что каждое слово стоит 2,5 грн, а знаки '-', ',', '.' стоят 0,5 грн. ...


lozromanik: Мы типа строку вводим?
thenp: Да
thenp: Можете пожалуйста помочь, а то совсем не понимаю, как это сделать.

Ответы

Автор ответа: lozromanik
1

Відповідь:

#include <stdio.h>

#include <stdlib.h>

char *get_string(int *len) {

   *len = 0;

   int capacity = 1;

   char *s = (char*) malloc(sizeof(char));

   char c = getchar();

   while (c != '\n') {

       s[(*len)++] = c;

       if (*len >= capacity) {

           capacity *= 2;

           s = (char*) realloc(s, capacity * sizeof(char));

       }

       c = getchar();

   }

   s[*len] = '\0';

   return s;

}

int main() {

setlocale(0,"");

   int len,c = 0,p=0;

   char *s = get_string(&len);

char * pch = s;

char t[] = {' ','.',',','-'};

while(*pch!=NULL){

 if(*pch=='.'||*pch==','||*pch=='-') p++;

 pch++;

}

pch = strtok (s,t);

 while (pch != NULL)

 {

     pch = strtok (NULL, t);

     c++;

 }

 

 printf("Слів = %i, знаків \'-\',\',\',\'.\' = %i, за все потрібно заплатити %lf гривень.",c,p,(2.5*c+0.5*p));

   free(s);

   return 0;

}

Пояснення:Багато коду де вкрав, сподіваюся, що коректно працює, використано динамічну пам'ять для довільного рядка та функцію strtok для розділення для слів, для підрахунку знаків просто порівнював кожний символ за вказівником.

Похожие вопросы
Предмет: Химия, автор: elmira2892