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

Sumowanie wartości char

VPS Starter Arubacloud
0 głosów
1,480 wizyt
pytanie zadane 2 kwietnia 2018 w C i C++ przez Scypyon Gaduła (3,450 p.)

Mam takie zadanie:

Napis pierwszy to taki napis, w którym suma kodów ASCII jest liczbą pierwszą.
Przykładowo, suma kodów ASCII w napisie ABB wynosi 197 i jest liczbą pierwszą,
co oznacza, że napis ABB jest napisem pierwszym. Podaj, ile jest napisów pierwszych
w pliku NAPIS.TXT.

Jak mam  sprawdzić, numer w tabeli ASCII jaki ma dana literka?

póki co kombinowałem coś w ten deseń:

#include <iostream>
#include <fstream>

using namespace std;

int czy_pierwsza(string c){

    int z=c.size();
    int x = 0;
    char y[25];

    for(int i=0;i<z;i++){

        c[i]=y[i];
        x+=y[i];
    }
    

    return x;
}

int main()
{
    fstream plik;

    plik.open("NAPIS.TXT", ios::in | ios::out);

    string c;
    char z;

    while(!plik.eof()){
        plik>>c;

        cout<<czy_pierwsza(c)<<endl;
    }

    return 0;
}

Jednak wyniki są na minusie, więc na pewno coś jest nie tak. Zależy mi na rozwiązaniu maturalnym, w sensie takim ,aby przeszło przez GNU kompilator i oczywiście na CodeBlocks.

Z góry dziękuje za pomoc :)

4 odpowiedzi

+1 głos
odpowiedź 2 kwietnia 2018 przez kuba1176 Początkujący (340 p.)
Nie potrzebujesz tej tablicy y. Wystarczy że zrobisz rzutowanie: x+=(int)c[i];

No i potem musisz tylko sprawdzić czy wartość zmiennej x jest pierwsza.
komentarz 2 kwietnia 2018 przez Scypyon Gaduła (3,450 p.)
możesz rozwinąć? W sensie pokazać w kodzie?
+1 głos
odpowiedź 2 kwietnia 2018 przez RafalS VIP (122,820 p.)

Typ char w c++ to liczba, domyślnie wyświetlana jako jej reprezentacja znakowa w tablicy ASCII, możesz np zrobić coś takiego char c = 'a' + 1; i masz 'b'. Wystarczy zsumować literki w liczniku typu int, bo charowi mogło by braknąć pojemności. Nie potrzebujesz żadnej konwersji.
Co do kodu to rozwiązanie na razie nie ma sensu, bo sumujesz jakieś śmieci (niezainicjalizowane wartości) z tablicy y. Po drugie nadpisujesz kolejne literki stringa tymi niezaiinicjalizowanymi śmieciami z tablicy y.
Jeśli nie wiesz o czym mówie to puść sobie taki kod:

#include <iostream>
int main()
{
    int tab[5];
    for(int i = 0; i <5; i++)
        std::cout<<tab[i]<<" ";
}


Nie podam Ci gotowego rozwiązania, bo to się mija z celem ;P

komentarz 2 kwietnia 2018 przez Scypyon Gaduła (3,450 p.)

Czyli załóżmy ,że Zapisuje ASDAS jako string , podaje do funkcji również jako string i potem robię:

    int z=c.size();
    int x = 0;
    char y;

    for(int i=0;i<z;i++){

        y=c[i];
        x+=y;
    }

czy int y; ?

komentarz 2 kwietnia 2018 przez RafalS VIP (122,820 p.)
a jakbyś zsumował wartości z tablicy intów?
komentarz 2 kwietnia 2018 przez RafalS VIP (122,820 p.)
znaczy ten kod już ma większy sens, ale nie potrzebujesz wcale tego char y, spróbuj po prostu x+=z[i];
komentarz 2 kwietnia 2018 przez Scypyon Gaduła (3,450 p.)
wydaje się wporządku, liczby dodatnie, niektóre po parę tys, ale na pewno takie rozwiązanie jest dobre??
komentarz 2 kwietnia 2018 przez Scypyon Gaduła (3,450 p.)
można odczytywać szufladkę stringa jako int? i wtedy daje numer ascii?
komentarz 2 kwietnia 2018 przez niezalogowany
Możesz rzutować ją na int. Czasami dzieje się to domyślnie (automatycznie). Jak wyżej w przypadku x += y.
komentarz 2 kwietnia 2018 przez Scypyon Gaduła (3,450 p.)
W takim razie dokończę wieczorem zadanie i jeżeli wszystko będzie śmigało daje naj :) Dzięki
0 głosów
odpowiedź 2 kwietnia 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)

Zmienna typu char przechowuje właśnie numer w tablicy ASCII danego znaku. Błąd w kodzie jest w tym miejscu:

c[i]=y[i];

Przypisanie jest nie w tą stronę. Poza tym ta tablica jest do niczego niepotrzebna w tym zadaniu.

PS. Nazywaj jakoś sensownie zmienne. Nazywanie zmiennych literami a, b, c... jest bardzo złą praktyką.

komentarz 2 kwietnia 2018 przez Scypyon Gaduła (3,450 p.)
Zgadzam się, w językach które używam na co dzień tak nie robię. Tak wiem ,że tutaj jest błąd, jednak jak go naprawić?
0 głosów
odpowiedź 2 kwietnia 2018 przez Beginer Pasjonat (22,110 p.)

Poniżej przykladowy kod, który sumuje wartości  ASCII pojedynczych znaków w słowie "ABB".

U Ciebie słowem jest zmienna string c.

#include <iostream>
using namespace std;

 int main()
 {
  string slowo = "ABB";
  size_t licznik = 0;
  for (int i = 0; i < slowo.size(); i++)
  licznik = licznik + slowo[i];

  cout << licznik << endl;
 }
  

 

komentarz 4 kwietnia 2018 przez Scypyon Gaduła (3,450 p.)
size_t ? co to jest?
komentarz 4 kwietnia 2018 przez Beginer Pasjonat (22,110 p.)
'size_t'  jest typem zmiennej (jak np.: int, float, double), który stosuje się do liczb /zmiennych o wartościach całkowitych, dodatnich. Prosty licznik jest tego typu zmienną, nie przyjmuje wartości ujemnych.

Zamiast:  size_t licznik;  równie dobra będzie deklaracja:  int licznik.

Podobne pytania

0 głosów
1 odpowiedź 230 wizyt
pytanie zadane 11 października 2017 w C i C++ przez BinaryMan Stary wyjadacz (12,620 p.)
+1 głos
2 odpowiedzi 540 wizyt
pytanie zadane 25 lutego 2021 w JavaScript przez MarcoPolo Nowicjusz (180 p.)
0 głosów
0 odpowiedzi 149 wizyt
pytanie zadane 27 kwietnia 2019 w SQL, bazy danych przez Shimeo7 Obywatel (1,910 p.)

92,959 zapytań

141,920 odpowiedzi

321,150 komentarzy

62,292 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...