odpowiednik funkcji isset w języku c

0

Mam taki problem przepisuje skrypt php na język c i tam jest użyta funkcja isset i jaki jest odpowiednik tej funkcji w języku c ?

0

Zależy od kontekstu.
Wrzuć fragment z PHP.

0
function porownaj($text1,$text2) {
  
  $ilosc_zmakow_1 = strlen($text1);
  $ilosc_zmakow_2 = strlen($text2);
  $prawidlowa = 0;
  $ilesc_znakoe_najwiekszego_stringa = "";
  if ($ilosc_zmakow_1 > $ilosc_zmakow_2) $ilosc_znakow_najwiekszego_stringa = $ilosc_zmakow_1;
  else $ilosc_znakow_najwiekszego_stringa = $ilosc_zmakow_2;
  
  for ($i = 0;$i < $ilosc_znakow_najwiekszego_stringa;$i++) {
    if (isset($text1[$i]) and isset($text2[$i])  and $text1[$i] != $text2[$i]) $prawidlowa--;
    else if (isset($text1[$i]) and isset($text2[$i]) and  $text1[$i] == $text2[$i]) $prawidlowa++;
    
    
  }
  
  
  $wynik = ($ilosc_zmakow_1 + $ilosc_zmakow_2) / 2;
  //print $prawidlowa;
  $wynik2 = $prawidlowa / $wynik;
  //if ($wynik2[0] == "-" and $wynik2[1] == "0") print "dobrzde";
  return $wynik2;




}
1

nie ma, mozesz napisac sobie

bool isSet(tutajTwojTyp obiekt)
{
  return obiekt != NULL;
}
3

@fasadin: takie coś niekoniecznie musi działać jeżeli np. programista zapomniał zainicjalizować wskaźnik przez NULL albo przemielenie obiektu przez jakąś libkę zwraca śmieci zamiast NULL. Ot. osobliwości C. :-)

@pol90: https://stackoverflow.com/questions/230687/counterpart-of-phps-isset-in-c-c Tak naprawdę musisz zmienić trochę myślenie podchodząc do C, bo wiele rzeczy działa tam inaczej niż w PHP i czasami robienie czegoś identycznie jak w kodzie PHP nie ma sensu. Nawet co do Twojego fragmentu kodu; w C nie ma stringa jako takiego tylko cstring i standardowa libka do sprawdzania co w nim siedzi.

1

@pol90: ten kod będzie wyglądał mniej więcej tak (abstrahując od tego co ma robić):

#include<stdio.h>
#include<string.h>

double porownaj(const char* pierwszy, const char* drugi) {

    if (pierwszy != NULL && drugi != NULL)
    {
        int ilosc_znakow_pierwszego = strlen(pierwszy);
        int ilosc_znakow_drugiego = strlen(drugi);
        int prawidlowa = 0;
        int ilosc_znakow_najwiekszego_stringa = 0;

        if (ilosc_znakow_pierwszego > ilosc_znakow_drugiego)
            ilosc_znakow_najwiekszego_stringa = ilosc_znakow_pierwszego;
        else
            ilosc_znakow_najwiekszego_stringa = ilosc_znakow_drugiego;


        int i = 0;
        for (; i < ilosc_znakow_najwiekszego_stringa; ++i)
        {
            if (pierwszy[i] == '\0' || drugi[i] == '\0')
                break;

            if (pierwszy[i] != drugi[i]) --prawidlowa;
            else if (pierwszy[i] == drugi[i]) ++prawidlowa;
        }

        double wynik = (ilosc_znakow_pierwszego + ilosc_znakow_drugiego) / 2.0;
        double finalny_wynik = prawidlowa / wynik;

        return finalny_wynik;
    }
    return -1;
}

int main()
{
    printf("%f\n", porownaj("grzesiek", "grzesiek"));
    printf("%f\n", porownaj("grzesiak", "grzesiek"));
    return 0;
}
0

Zwraca mi następujące błędy

poronywanie.c:33:8: error: conflicting types for ‘porownaj’
 double porownaj(const char* pierwszy, const char* drugi) {
        ^
poronywanie.c:17:18: note: previous implicit declaration of ‘porownaj’ was here
   printf("%f\n", porownaj("grzesiek", "grzesiek"));
                  ^
poronywanie.c: In function ‘porownaj’:
poronywanie.c:48:9: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode
         for (int i; i < ilosc_znakow_najwiekszego_stringa; ++i)

1

Jak widzisz działa prawidłowo: https://ideone.com/d1HMxy
Może pokaż co masz w swoim kodzie (w całym pliku, bo wiem, że masz też mój kod na pewno).

@pol90: Taka inicjalizacja w pętli for sprzed C99 jest nieprawidłowa for (int i; i < ilosc_znakow_najwiekszego_stringa; ++i) Zresztą abstrahując od C99 także jest nieprawidłowa :)

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