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

Błąd w odczytywaniu określonej litery w zmiennej string

Object Storage Arubacloud
0 głosów
153 wizyt
pytanie zadane 8 stycznia 2018 w C i C++ przez Perseusz Bywalec (2,190 p.)
edycja 8 stycznia 2018 przez Perseusz

Sorry, że znów zabieram wam czas, ale... jak w tytule: gdy próbowałem zbudować program dostałem raport o błędzie. Nie do końca ogarnąłem jak przełączać się pomiędzy literami w tekście, co też jednak chciałem zrobić i problem jest pewnie taki, że nie umiem używać funkcji at. choć i próbowałem brać literę po prostu z teksu (string::operator[])

#include <iostream>
#include <stdlib.h>
#include <cstdlib>
#include <time.h>
#include <fstream>
#include <algorithm>
#include <string>
using namespace std;
losuj()
{
srand(time(NULL));

int los = rand()%ile+1;

fstream wiersze;
string zdanie, A,B,C,D;

int odp[4];
for (int a=0;a<=2;a++)
{
    odp[a]=rand()%ile+1; //ile = 3
    wiersze.open("Zdania.txt",ios::in);
    for (int b=1; b<=odp[a]; b++)
    getline(wiersze,zdanie);
    wiersze.close();
        int dlg=zdanie.length();
        int litera=rand()%dlg; int pk,kn; //zmienna litera oscyluje od 1 do 20 a dlg od 18 do 20

        for (pk=litera; pk<=0; pk--)
        {
            if (zdanie.at(litera-1)/*tu wykrywa blad*/!=isspace) litera--;
            else break;
        }
        for (kn=litera; kn<=dlg; kn++)
        {
            if (zdanie.at[litera+1]/*i tu*/!=isspace) litera++;
            else break;
        }
}


return (los);
}

C:\Users\1090764\workspace\ProjektI\main.cpp|65|error: invalid operands of types 'char' and '<unresolved overloaded function type>' to binary 'operator!='|
C:\Users\1090764\workspace\ProjektI\main.cpp|70|error: invalid types '<unresolved overloaded function type>[int]' for array subscript|

 

Proszę o radę i pomoc!

1 odpowiedź

+1 głos
odpowiedź 8 stycznia 2018 przez adrian17 Ekspert (344,860 p.)

zdanie.at[litera+1]

To metoda; metody wywołuje się nawiasami. Jeśli chcesz użyć [], wystarczy zdanie[x].

!=isspace

`isspace` to funkcja. Wywołujesz ją na znaku i zwraca boola.

Tak bocznie: `losuj()` nie ma zadeklarowanego zwracanego typu, co jest wymagane w C++ie.

komentarz 8 stycznia 2018 przez Perseusz Bywalec (2,190 p.)
Właśnie "odkleiłem" isspace od '!=' i w końcu działa!

Nie miałem pojęcia, że to może tak wpłynąć na logikę, szczególnie, że myślałem, że te znaki (chyba operatory ) w ogóle nie potrzebują oddzielenia. W każdym razie działa, co prawda znalazło się parę na szczęście prostszych błędów, więc nad nimi sam pomyśle

i tak apropo zadeklarowałem 'losuj()' typ przed 'main', z tego co patrzyłem chyba inaczej nie działa.

Dzięki i przepraszam za moje pomyłki, jestem po szkole troszkę zmęczony i nie najłatwiej mi sie skupić
komentarz 8 stycznia 2018 przez adrian17 Ekspert (344,860 p.)

Nie miałem pojęcia, że to może tak wpłynąć na logikę, szczególnie, że myślałem, że te znaki (chyba operatory ) w ogóle nie potrzebują oddzielenia

(Coś innego musiałeś zrobić, bo spacje nie powinny mieć znaczenia.)

komentarz 10 stycznia 2018 przez Perseusz Bywalec (2,190 p.)
edycja 10 stycznia 2018 przez Perseusz

Sorka że dzisiaj dopiero odpisuje... 

Jestem prawie pewien, że chodziło o spacje wtedy, ale przed chwilą okazało się to nieistotne. Spróbowałem użyć po prostu isspace i efekt jest:

for (pk=litera; pk>=1; pk--)
        {
            if (isspace(zdanie[litera-1])) break;
            else litera--;
        }
        for (kn=litera; kn<=dlg; kn++)
        {
            if (isspace(zdanie[litera+1])) break;
            else litera++;

Teraz się męcze z substr. 'em

cout << pk << endl << kn << endl; cout << zdanie.substr (pk,kn);

W konsoli ewidentnie jest, że 'pk' to np. 0 a 'kn' 6 a mimo to wyświetla 6 liter, albo nawet w innym przypadku bierze za dużo tekstu i wyświetla 2 wyrazy zamiast jednego chociaż pk i kn powinny wskazywać na jeden. Jak ci sie jeszcze chce pogłówkować nad moim problemem to się nie pogniewamsmiley

 

EDIT: Problem rozwiązany, musiałem użyć pętli "for"

Podobne pytania

0 głosów
1 odpowiedź 216 wizyt
0 głosów
2 odpowiedzi 3,063 wizyt
pytanie zadane 1 stycznia 2019 w C i C++ przez Drax658 Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 236 wizyt
pytanie zadane 20 kwietnia 2019 w C i C++ przez Rafep Nowicjusz (170 p.)

92,555 zapytań

141,403 odpowiedzi

319,559 komentarzy

61,940 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!

...