Portál AbcLinuxu, 11. května 2025 09:59
char retazec[3]; cin << retazec[]; cout << retazec[] << endl; if (retazec == "ahoj") { cout << "true"; } else { cout << "false"; }ked napisem ahoj, vrati mi to "ahoj" a "false". skusal som to upravit napr if (retazec == "ahoj\n") (Perl by to myslim zozral keby tam bolo eq :) apod. Ale nic som nevyriesil. Chapem ze to je ulozene v poli, takze by sa to mohlo dat vyriesit nejakym porovnanim z polom. Neide mi to ani ked si tu premennu nadefinujem v kode (teda bez cin). A co ma trapi najviac, kvoli comu som to vlastne robil je, mi to neporovna parameter predavany funkcii main z prikazoveho riadku. teda ked som to spravne pochopil, argv je vnorene pole a k tomu este ako ukzaovatel? ako to teda vyriesit? ukazovatele mi zatial akosi neidu a mam v tom truchu zmatok. pls pomozte niekto....
std::string
a pak je namístě i operátor ==
.
retazec == "ahoj"
char[]
, což je pointer na začátek řetězce. Je nutné použít buď fci strcmp
deklarovanou v string.h
: if (! strcmp (retazec, "ahoj"))
, nebo (vzhledem k tomu, že to je C++ kód) je daleko čistějším řešením typ std::string
místo char[]
, kde to jde dělat intuitivně tak, jak jste napsal (tedy std::string retazec
...
if (retazec == "ahoj")
. Je myslím v #include <string>
#include <iostream> using namespace std; int main(int argc, char **argv) { if (!strcmp(argv[2],"ahoj")) { cout << "true\n"; } else { cout << "false\n"; } }bud mi to vrati false ked tam nedam nic, alebo segmention fault ked dam ako parameter ahoj alebo hocico ine... skusal som to aj ako
int main(int argc, char *argv[])aky je medzi tym vlastne rozdiel ?
char retezec[velikost]
), je dobré použít takovou funkci, kterou lze rovněž omezit, tj. třeba fgets(retezec, sizeof(retezec), stdin)
. A nebo lze použít vhodnější string
.
cin >> retezec;Místo
cin
může přijít jakýkoli jiný objekt vzešlý z istream
, ale musí tam být šipečky od objektu, ne do něj.
==
porovnává hodnoty, u standardních polí jsou to tedy nějaké ukazatele. V C++ jej lze přetížit, takže u objektů typu string
nebo jednoho string
a jednoho pole char *
se porovnávají skutečně řetězce.
main
jsou záludné. V argc
je počet parametrů, v argv
je pole ukazatelů na řetězce s těmito parametry. Délka pole argv
může být pokaždé různá, jediný prvek, který je přítomen vždy, je argv[0]
, tedy název programu. Pokud chceme pracovat s nějakým dalším, je potřeba se nejprve ujistit o jeho přítomnosti pomocí argc
.
endl
než "\n"
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.