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

C++ - błąd związany z transform(...)

Object Storage Arubacloud
–1 głos
174 wizyt
pytanie zadane 10 lutego 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)

Witam bajecznie,

otóż nie potrafię już sobię poradzić samemu, głowię się nad pewnym błędem, a dokładniej polega on na tym, że używając linii kodu 

transform(odp.begin() odp.end() odp.begin(), ::toupper);

kompilator wywala mi błąd "no matching function for call to 'transform(std::__cxx11::basic_string<char>::i..."

jakiś spec może wie o co chodzi i poratowałby odpowiedzią? Byłbym niezmiernie wdzięczny, bo tracę już zmysły...

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>


using namespace std;

string odp;

int ile;

int main()
{
    setlocale( LC_ALL, "" );

    fstream plik;
    plik.open("odpowiedzi.txt", ios::out);
    if(plik.good()==false) cout << "Nie można odtworzyć pliku.";

    cout << "Ile odpowiedzi masz zamiar udzielić?";
    cin >> ile;

    int* tablica;
    tablica= new int [ile];

    for (int i=0; i<ile; i++)
    {
        cout << i+1 << ". ";


        ponownaodpowiedz:
        cin >> odp;

        if(odp!="a" && odp!="b" && odp!="c" && odp!="A" && odp!="B" && odp!="C") {cout << "Nie ma takiej odpowiedzi, wybierz ją ponownie: "; goto ponownaodpowiedz;}

        transform(odp.begin() odp.end() odp.begin(), ::tolower);

        plik << i+1 << ". " << odp << endl;
    }
    plik.close();

    return 0;
}

? Ja już tracę zmysły...

komentarz 10 lutego 2020 przez DragonCoder Nałogowiec (36,500 p.)
edycja 10 lutego 2020 przez DragonCoder
A przecinki to zjadles z glodu? :P

https://en.cppreference.com/w/cpp/algorithm/transform

nie chcesz uzyc moze

http://www.cplusplus.com/reference/locale/toupper/

Zeby zmienic wszystkie na wielkie litery?

I co to za goto?
komentarz 11 lutego 2020 przez j23 Mędrzec (194,920 p.)

@Nabuchadonozor,

Ja już tracę zmysły...

Chyba tak - używasz goto tam, gdzie spokojnie można użyć pętli do...while, wywołujesz std::transform w sumie nie wiadomo po co.

komentarz 11 lutego 2020 przez Nabuchadonozor Gaduła (3,120 p.)

@DragonCoder, dzięki wielkie za pomoc! Od wczoraj staram się zrobić to z tym co mówisz, ale nie mogę ogarnąć tego, ciężko zrozumieć mi coś z tej biblioteki <locale>. Znajdę jakieś poradniki i ogarnę to, bo widzę kilka innych ciekawych funkcji w niej :D A teraz się zabiore za zamienienie goto na po prostu pętle do ... while zamiast for. Miłego!

komentarz 11 lutego 2020 przez Nabuchadonozor Gaduła (3,120 p.)

@j23, funkcja transform() jest po to, by zamieniła mi litery nie ważne jakie będą wpisane -> na duże. Zlecenie przez nauczyciela takie było, bo on potrzebuje tego, żeby wpisując na szybko, nie trzeba było odpalać capsa czy trzymać shifta, program przeciez to może sam zrobić. A jeszcze nie napisałem, duże litery są czytelniejsze dla oka, jeśli ich jest 40. Podczas robienia tego w pętli do ... while, nie będę miał możliwości tak prostego skodzenia tego programu. Czysty juz zrobiony kodzik taki jaki powinien być dołączam na wszelki.

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <conio.h>

using namespace std;

string odp;
int ile;

int main()
{
    setlocale( LC_ALL, "" );

    fstream plik;
    plik.open("odpowiedzi.txt", ios::out);
    if(plik.good()==false) cout << "Nie mo¿na odtworzyæ pliku.";

    cout << "Ile odpowiedzi masz zamiar udzieliæ?: ";
    cin >> ile;

    int* tablica;
    tablica= new int [ile];

    for (int i=0; i<ile; i++)
    {
        cout << i+1 << ". ";


        ponownaodpowiedz:
        cin >> odp;

        if(odp!="a" && odp!="b" && odp!="c" && odp!="A" && odp!="B" && odp!="C") {cout << "Nie ma takiej odpowiedzi, wybierz j¹ ponownie: "; goto ponownaodpowiedz;}

        transform(odp.begin(), odp.end(), odp.begin(), ::toupper);

        plik << i+1 << ". " << odp << endl;
    }
    plik.close();

    cout << "Czas programu dobieg³ koñca.." << endl << endl << "KLIKNIJ DOWOLNY KLAWISZ, ABY WY£¥CZYÆ PROGRAM";


    _getch();
    return 0;
}

 

komentarz 11 lutego 2020 przez j23 Mędrzec (194,920 p.)

Nie musisz mi tłumaczyć, co robi std::transform, tylko ja nie widzę sensu wywołania tej funkcji w twoim kodzie. Jakbyś zrobił tak:

while (std::cin >> odp) {
    std::transform(odp.begin(), odp.end(), odp.begin(), ::toupper);
    if (odp == "A" || odp == "B" || odp == "C") break;
    std::cout << "Nie ma takiej odpowiedzi, wybierz ja ponownie: ";
}

to co innego.

komentarz 12 lutego 2020 przez Nabuchadonozor Gaduła (3,120 p.)
@j23, aaa o to Ci chodziło, a szczerze Ci powiem, że nie pomyślałem o takim użyciu jego. Dzięki za pomoc!

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 325 wizyt
pytanie zadane 13 października 2020 w C i C++ przez mccarol Nowicjusz (240 p.)
0 głosów
1 odpowiedź 137 wizyt
pytanie zadane 24 marca 2022 w C i C++ przez Andrzej Hnatiuk Początkujący (350 p.)
+1 głos
2 odpowiedzi 195 wizyt
pytanie zadane 22 listopada 2021 w HTML i CSS przez Billy Użytkownik (680 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...