• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Zamian słów na liczbę

0 głosów
630 wizyt
pytanie zadane 1 kwietnia 2019 w C i C++ przez BinaryMan Stary wyjadacz (12,620 p.)
zamknięte 1 kwietnia 2019 przez BinaryMan

Witam! 
Mam za zadanie napisać program w języku C, który po podaniu słownego zapisu liczby ma ją wyświetlić jako int.
 

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include <string.h>

int convert(char *word)
{
    printf("Word: %s\n", word);
    if(strcmp(word, "zero"))return 0;
    if(strcmp(word, "one"))return 1;
    if(strcmp(word, "two"))return 2;
    if(strcmp(word, "three"))return 3;
    if(strcmp(word, "four"))return 4;
    if(strcmp(word, "five"))return 5;
    if(strcmp(word, "six") == 0)return 6;
    if(strcmp(word, "seven"))return 7;
    if(strcmp(word, "eight"))return 8;
    if(strcmp(word, "nine"))return 9;
    if(strcmp(word, "ten"))return 10;
    if(strcmp(word, "eleven"))return 11;
    if(strcmp(word, "twelve"))return 12;
    if(strcmp(word, "thirteen"))return 13;
    if(strcmp(word, "fourteen"))return 14;
    if(strcmp(word, "fifteen"))return 15;
    if(strcmp(word, "sixteen"))return 16;
    if(strcmp(word, "seventeen"))return 17;
    if(strcmp(word, "eighteen"))return 18;
    if(strcmp(word, "nineteen"))return 19;
    if(strcmp(word, "twenty"))return 20;
    if(strcmp(word, "thirty"))return 30;
    if(strcmp(word, "forty"))return 40;
    if(strcmp(word, "fifty"))return 50;
    if(strcmp(word, "sixty"))return 60;
    if(strcmp(word, "seventy"))return 70;
    if(strcmp(word, "eighty"))return 80;
    if(strcmp(word, "ninety"))return 90;
}

int main()
{
        char line[256];

        fgets(line, sizeof line, stdin);
        int negative = 0;
        int num = 0, total = 0;
        
        char *p = strtok(line, " ");
        
        while (p != NULL)
        {
            printf("P: %s\n", p);
            if (strcmp(p,"negative"))
            {
                negative = 1;
            }
            else if(strcmp(p,"million"))
            {
                printf("1000000\n");
                total += num * 1000000;
                num = 0;
            }
            else if(strcmp(p,"thousand"))
            {
                total += num * 1000;
                num = 0;
            }
            else if(strcmp(p,"hundred"))
            {
                printf("100");
                num = num * 100;
            }
            else
            {
                num += convert(p);
            }
            p = strtok(NULL, " ");
        }
        total += num;
        
        if (negative == 1)
            total = (-1)*total;
        printf("Total = %d", total);

        return 0;
}

Kod niestety nie daje dobrego wyniku, w ogóle nie wchodzi do else gdzie jest num += convert(p)

Poza pętlą while gdy napiszę np printf("%d", convert("six")) wchodzi do funkcji, ale nie zwraca żądanej 6. 

komentarz zamknięcia: Program poprawiony, działa prawidłowo
3
komentarz 1 kwietnia 2019 przez Hiskiel Pasjonat (22,830 p.)
Kyrie Eleison
komentarz 1 kwietnia 2019 przez BinaryMan Stary wyjadacz (12,620 p.)
jakieś wskazówki jak to poprawić ?
komentarz 1 kwietnia 2019 przez Hiskiel Pasjonat (22,830 p.)
edycja 2 kwietnia 2019 przez Hiskiel
Najpierw popraw proszę funkcję convert.

Ja bym to zrobił tak:

Robisz strukturę aka map.
Tworzysz plik z kluczami w postaci np. "ten 10"

Wczytujesz ten plik i na podstawie tego konwertujesz.

 

A tak na serio, to poszukałbym jakiegoś API robiącego coś takiego, bo inaczej, żeby przetłumaczyć każdą cyfrę potrzebujesz (taki mi się wydaje) jakichś sieci neuronowych.
komentarz 1 kwietnia 2019 przez Hiskiel Pasjonat (22,830 p.)
Ale niech się wypowie mądrzejszy.
komentarz 1 kwietnia 2019 przez BinaryMan Stary wyjadacz (12,620 p.)
Właśnie w C++ kod działa normalnie gdy zamiast tej funkcji dam mapę na string zwykły, a muszę zrobić to zadanie w C :(
komentarz 2 kwietnia 2019 przez VirtualMember Pasjonat (15,790 p.)
implementowanie w C mapy dla początkującego nie jest rozsądne

1 odpowiedź

0 głosów
odpowiedź 1 kwietnia 2019 przez j23 Mędrzec (195,240 p.)

Można wiedzieć, dlaczego w convert jedynie dla six wartość zwrócona przez strcmp jest porównywana do zera?

komentarz 1 kwietnia 2019 przez BinaryMan Stary wyjadacz (12,620 p.)
Temat ogarnięty, działa już wszystko. Dzięki i zamykam :)

Podobne pytania

0 głosów
1 odpowiedź 194 wizyt
pytanie zadane 16 stycznia 2018 w C i C++ przez Admin Cpp Początkujący (350 p.)
+1 głos
1 odpowiedź 818 wizyt
0 głosów
1 odpowiedź 647 wizyt
pytanie zadane 1 grudnia 2020 w Assembler przez Tomek Gawlina Nowicjusz (150 p.)

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...