Jak zwrócic wartosć nullptr?

0
const char* countChar (const char tab[], char c, int& count){
char* countChar;
size_t size = sizeof(tab) / sizeof(tab[0]);
count=0;
int j=0;
for (size_t i = 0; i < size; i++){
    if(tab[i]==c){
            if(j==0){
  countChar=&c;
    j++;
            }
        count++;


    }
}
    if(count==0){
    return nullptr;
    }
    else{

        return countChar;
    }
}

Mam coś takiego i w przypadku gdy żadna wartość nie została znaleziona(bez znaku c w tablicy tab), funkcja powinna zwrócić specjalną
wartość nullptr.Czyli o co tu chodzi?

0

"nullptr was not declared in this scope" czyli jak zadeklarowac w tym zakresie?

1

Z racji tego że przekazujesz napis "w stylu C", ostatni znak jest '\0', stąd chyba sprawniej to zrobić tak:

#include <iostream>

const char* countChar (const char tab[], char c, int& count) {
    const char * ptrChar = tab;
    while(*ptrChar) {
        if(*ptrChar == c) {
            ++count;
        }
        ++ptrChar;
    }
    return count == 0 ? nullptr: ptrChar;
}

int main() {
    const char * msg = "ala ma kota";
    int count = 0;
    auto ptr = countChar(msg, 'a', count);
    if(ptr == nullptr) {
        std::cout << "Nie ma w napisie przekazanej litery.\n";
    } else {
        std::cout << "W napisie jest " << count << " wystąpień podanej litery.\n";
    }
}

Ubolewam jednak osobiście że od tej strony uczy się C++ :-( To jest tak jakby uczyć jeździć samochodem zaczynając od spuszczania przepracowanego oleju "na kanale".

PS1. nullptr jest dostępny od C++11 stąd w kompilatorze dodaj przełącznik do tego standardu.
PS2. A co do pierwszego wystąpienia, to już dodaj zapamiętanie wskaźnika samodzielnie :)

0

co oznacza const char * ptrChar = tab; i const char * msg = "ala ma kota"; I czy ta pętla while wykonuje się do czasu aż wskaznik nie wyjdzie poza tablice napisu?

1
asdad sdasds napisał(a):

co oznacza const char * ptrChar = tab; i const char * msg = "ala ma kota"; I czy ta pętla while wykonuje się do czasu aż wskaznik nie wyjdzie poza tablice napisu?

Ostatnim znakiem w napisie w C, jest znak '\0' czyli o kodzie zero. To wystarcza do określenia gdzie jest koniec napisu. Stąd pętla while(...) będzie iterowała do zakończenia napisu.

3
asdad sdasds napisał(a):

"nullptr was not declared in this scope" czyli jak zadeklarowac w tym zakresie?

Czyli nie masz włączonego C++11 lub nowszego.
W konfiguracji projektu musisz włączyć nowszą wersję C++!
Zapewne używasz gcc/clang (MinGW).

1 użytkowników online, w tym zalogowanych: 0, gości: 1