Porovnání textového řetězce? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Porovnání textového řetězce? – C / C++ – Fórum – Programujte.comPorovnání textového řetězce? – C / C++ – Fórum – Programujte.com

 

Martin
~ Anonymní uživatel
1600 příspěvků
29. 2. 2012   #1
-
0
-

Dobrý den neznáte někdo způsob jak nahradit funkci strcmp v jazyku C???? Mám totiž povoleny jen dvě základní knihovny : <stdio.h> a <stdlib.h>

Zkoušel jsem to  sizeof(t1) < sizeof(t2) ale problém spočívá v tom, že sizeof(t1) i sizeof(t2) se vyhodnotí na počet
Bytů, které potřebuje proměnná typu char* při uložení v paměti. Délku řetězce takto zjistit nelze, je nutné vymyslet jiný způsob. Jenže jaký??? :-/  Díky

Nahlásit jako SPAM
IP: 83.240.73.–
yaqwsx+9
Posthunter
29. 2. 2012   #2
-
0
-

Způsob známe - tuto funkci si napsat. Není to nic složitého. Pokud se potřebuješ od něco odpíchnout, může posloužit tento úryvek z dokumentace ke standardní knihovně (tento úryvek v podstatě piposuje celou funkci):

This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ or until a terminating null-character is reached.

Nahlásit jako SPAM
IP: 85.160.46.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Martin
~ Anonymní uživatel
1600 příspěvků
29. 2. 2012   #3
-
0
-

Asi vím co máš na mysli, ale neumím to nějak slušně dát dohromady :c/ Kde dělám chyby prosím??

#include <stdio.h>
#include <stdlib.h>

int porovnej(char *t1, char *t2)
{
    int i, j, delka, d1, d2;
    for(i=1; *(t1)='\0'; i++) //merime delku retezce
    {
        d1 = i;
    }
    for(i=1; *(t2)!='\0'; i++) //merime delku retezce
    {
        d2 = i;
    }
    if (d1 >= d2)
    {
        delka = d1;
    }

        else
        {
        delka = d2;
        }

    for ( j=0; j < delka; j++) {
        if ( t1[j] > t2[j] ) return 1;
        if ( t1[j] < t2[j] ) return -1;
        if ( t1[j] == t2[j] ) return 0;
}
}
int main()
{
    char *slovo1 = "proc";
    char *slovo2 = "ahoj";
    if ( porovnej(slovo1,slovo2) == 0 ) printf("Obe slova \"%s\" jsou stejna.",slovo1);
    if ( porovnej(slovo1,slovo2) == 1 ) printf("Slovo \"%s\" je vetsi nez slovo \"%s\".", slovo1, slovo2);
    if ( porovnej(slovo1,slovo2) == -1 ) printf("Slovo \"%s\" je vetsi nez slovo \"%s\".", slovo2, slovo1);
  //  printf("Slovo \"%s\" je vetsi nez slovo \"%s\".", slovo1, slovo2);
    return 0;
}
Nahlásit jako SPAM
IP: 83.240.73.–
KIIV
~ Moderátor
+43
God of flame
29. 2. 2012   #4
-
0
-

strcmp neporovnava podle delky.. jede presne podle popisu ktery tu uz padl - srovna prvni znak v obou a pokud sou stejne pokracuje s dalsim dokud neni konec jednoho z retezcu nebo jsou znaky ruzne

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 36 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý