• 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ę

Object Storage Arubacloud
0 głosów
403 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 (194,920 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ź 154 wizyt
pytanie zadane 16 stycznia 2018 w C i C++ przez Admin Cpp Początkujący (350 p.)
+1 głos
1 odpowiedź 496 wizyt
0 głosów
1 odpowiedź 405 wizyt
pytanie zadane 1 grudnia 2020 w Assembler przez Tomek Gawlina Nowicjusz (150 p.)

92,555 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,941 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...