• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
192 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 Mentor (350,120 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 Mentor (350,120 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ź 275 wizyt
0 głosów
2 odpowiedzi 3,595 wizyt
pytanie zadane 1 stycznia 2019 w C i C++ przez Drax658 Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 373 wizyt
pytanie zadane 20 kwietnia 2019 w C i C++ przez Rafep Nowicjusz (170 p.)

93,103 zapytań

142,079 odpowiedzi

321,591 komentarzy

62,445 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 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...