Funkce substr() v c++

HackForum

Funkce substr() v c++#
czus mám problém s funkcí substr() v c++, dělám virtuální linux konzoli pro soutěž u nás ve škole a mám tam následující "architekturu": pro každý trošku důležitější (kořenový) adresář je vyhrazena funkce, např. pro /sbin je vyhrazena funkce void sbin() a ta se volá hned na začátku.. a mám tam blok podmínek pokud se zadá korektní příkaz tak se provede to a to. ale mám problém s příkazy typu rm a cd. když zadám třeba rm kernel tak v pořádku kernel se odstraní protože je tento příkaz v bloku podmínek, když zadám jen rm taky v pořádku ale vyhodí mě to že soubor nebyl nalezen. ale když zadám rm necoconeexistuje tak už mě to hodí chybu, že soubor nebyl nalezen ptže není v podmínkovém bloku. zkoušel jsem použít funkci substr() která přečte dejme tomu v našem případě první dva znaky to rm a podle toho se zachová. zkoušel jsem toto:
if ( command.find("rm") ) ale dostal jsem znovu ERROR: Command not recognized a pak ještě toto:
if (command.substring(0,5).equals("rm") { proved vec...() } a to taky nefachalo může někdo poradit jak správně použít tuto funkci v podmínce ? díky

----------
Hello world! Segmentation fault. Core dumped.
(odpovědět)
D@N | E-mail | ICQ 22316335930.4.2007 9:32
re: Funkce substr() v c++#
proc si nevypises, co mas v tom commandu?
nejsem expert na metody stringu, ale substring(0,5).equals("rm") .... nema to byt (0,2) ??
(odpovědět)
naked | 81.92.155.*30.4.2007 10:14
re: Funkce substr() v c++#
máš pravdu má.. sry má tam být 0,2

----------
Hello world! Segmentation fault. Core dumped.
(odpovědět)
D@N | E-mail | ICQ 22316335930.4.2007 10:17
re: Funkce substr() v c++#
a ani s tim to nefunguje? hodil by se kus zdroje :)
(odpovědět)
naked | 81.92.155.*30.4.2007 10:19
re: Funkce substr() v c++#
ok posílám kus zdroje je to funkce void sbin() :
void sbin() problém jsem označil // poznámkou
{
string command;
system("cls");
commands:
cout << "/sbin>";
getline(cin, command);
if ( command == "help" )
{
cout << "Function list and uses\n";
cout << "======================\n";
cout << "\n";
cout << "cd ------- Change Directory - Navigate around the file system\n";
cout << "cat ------ Open a file to view its contents\n";
cout << "help ----- Show this menu\n";
cout << "ls ------- List files/folders in a directory\n";
cout << "cls ------ Clear Screen - empty the screen of all data\n";
cout << "rm ------- Remove File - Delete a file\n";
cout << "\n";
goto commands;
}
if ( command == "ls" )
{
cout << "dhclient\n";
cout << "dhclient-script\n";
cout << "dmesg\n";
cout << "ifconfig\n";
cout << "init\n";
cout << "ipf\n";
cout << "ipfs\n";
cout << "ipfstat\n";
cout << "ipfw\n";
cout << "ipmon\n";
cout << "ipnat\n";
cout << "kldload\n";
cout << "kldunload\n";
cout << "ldconfig\n";
cout << "mount\n";
cout << "mount_mfs\n";
cout << "mount_msdos\n";
cout << "ping\n";
cout << "reboot\n";
cout << "route\n";
cout << "shutdown\n";
cout << "sysctl\n";
cout << "unmount\n";
cout << "\n";
goto commands;
}
if ( command == "cls" )
{
system("cls");
goto commands;
}
if ( command.substring(0,2).equals("rm") ) //tady!!!!
{
cout << "File could not be found in: /sbin\n";
cout << "\n";
goto commands;
}
if ( command == "rm dhclient" )
{
cout << "File was Successfully deleted\n";
cout << "\n";
goto commands;
}
else
{
cout << "ERROR: Command not recognized\n";
cout << "\n";
goto commands;
}

----------
Hello world! Segmentation fault. Core dumped.
(odpovědět)
D@N | E-mail | ICQ 22316335930.4.2007 10:27
re: Funkce substr() v c++#
je to zatím rozdělaný--- bez booleanů nechcu jít dál dokud nevyřeším tenhle problém pak by v tom byl bordel

----------
Hello world! Segmentation fault. Core dumped.
(odpovědět)
D@N | E-mail | ICQ 22316335930.4.2007 10:32
re: Funkce substr() v c++#
1) if (command.substr(0,2) == "rm")

2) bude nejlepsi dat tuhle podminku az za vsechny ostatni, ktery hledaj "rm", protoze i kdyz das "rm dhclient" tak to splni hned prvni podminku...

3) nebude lepsi si to rozdelit do mensich funkci, treba rm(string), rozdelit si prikaz na tokeny podle prazdnejch znaku a do ifu nacpat jenom if ("rm") { rm(token2); }




(odpovědět)
naked | 81.92.155.*30.4.2007 10:54
re: Funkce substr() v c++#
to by šlo moh bys mě to prosím tě trošku víc osvětlit ? jinak díky za to už to funguje ale to s těma tokenama bys mě mohl trošku popostrčit protože já mazání souborů zatím řeším přes bool, takže na začátku void sbin(); mám třeba bool dhclient = true; a pak v tom seznamu ls mám nad dhclient podmínku if (dhclient) no a když pak použiju ten příkaz rm dhclient tak mě to vyhodí file was successfully deleted a hodnota bool dhclient se nastaví na false ale tohle vypadá komplexnější

----------
Hello world! Segmentation fault. Core dumped.
(odpovědět)
D@N | E-mail | ICQ 22316335930.4.2007 11:04
re: Funkce substr() v c++#
tady mas priblizne co jsem myslel... [link]
(odpovědět)
naked | 81.92.155.*30.4.2007 11:44
re: Funkce substr() v c++#
joo díky moc jsi mě pomohl ;)

----------
Hello world! Segmentation fault. Core dumped.
(odpovědět)
D@N | E-mail | ICQ 22316335930.4.2007 11:47
re: Funkce substr() v c++#
a ještě bych měl jednu menší otázečku... jak jsem říkal každej adresář mám ve spešl funcki ale... používám booleany (teď už jen k těmto účelům) jako .. no dalo by se to přirovnat.. mám zkrátka v tom programu pár úkolů (smazat pár souborů, logy a resetovat systém) a k tomu právě požívám booleany ale problém je v tom že když mám na začátku funkce všechny hodnoty nastavené na false, a člověk mezitím nějakou určitou akcí přenastaví na true, tak kdyby náhodou z jinýho "adresáře" (funkce) zavoloal znovu tu starou funkci, všechny booleany by se znovu nastavily na alse neví někdo jak to ošetřit ? díky

----------
Hello world! Segmentation fault. Core dumped.
(odpovědět)
D@N | E-mail | ICQ 22316335930.4.2007 12:29
re: Funkce substr() v c++#
ty mas stavy souboru reseny
true = existuje, false = smazany???

(odpovědět)
naked | 81.92.155.*30.4.2007 12:59
re: Funkce substr() v c++#
jo přesně tak dívej se mám to nějak taghle:
void sbin()
{
bool dulezity-soubor = true; /existuje
bool soubor-s-logy = true; //existuje
bool restartovano = false; //neexistuje
}
to je jen příklad na začátku jsou všechny nastavený na true... no a když třeba smažeš soubor s logy a onen "důležitý soubor" změníš tím ty hodnoty na false.. ale když je třeba user v kořenovém adresáři... najednou si zamane že si půjde znovu do sbin a znovu zavolá funkci void sbin() znovu se všechny nastaví na původní hodnotu a to já nechcu

----------
Hello world! Segmentation fault. Core dumped.
(odpovědět)
D@N | E-mail | ICQ 22316335930.4.2007 13:04
re: Funkce substr() v c++#
no, nechci menit celou tvoji koncepci, ale nebylo by dobry udelat ten filesystem trochu interaktivnejsi? :)
aby bylo mozny pridavat a kopirovat soubory, ktery nemusis napevno busit do programu? udelej filesystem jako stromovou strukturu, do kterej budes pridavat/menit dalsi vetve atd. pouzij k tomu treba tridu map [link]
a nad ni stavej operace pro kopirovani/mazani/placani
(odpovědět)
naked | 81.92.155.*30.4.2007 13:30
re: Funkce substr() v c++#
tak jo díky zkusím to vypadá to rozhodně jednodušeji než můj "dosavadní" program ptže ten zabírá nekřesťanský množství paměti

----------
Hello world! Segmentation fault. Core dumped.
(odpovědět)
D@N | E-mail | ICQ 22316335930.4.2007 13:32
re: Funkce substr() v c++#
Pokud to má brát příkazy, tak si udělej syntaktický analyzátor - na to potřebuješ znát konečný stavový automat a implementovat ho.
Takže nejdřív koukni na to. nebudeš pak řešit takovéhle pseudoproblémy, které se při promyšleném zpracování vůbec objevit nemají.
(odpovědět)
guguma | 195.113.79.10/10.0.10.*30.4.2007 17:23
re: Funkce substr() v c++#
no promyšlené zpracování je přesně to co můj program nemá. jeho jediný účel je trošku nasimulovat bash a provést uživatele alespoň základy linuxu než do toho půjde "naostro" dalo by se to považovat za simulátor rootování i když když máte dva comply na síti a pár linuxů, klidně i livecd, můžete si rootování užít až dosyta a reálně :D

----------
Hello world! Segmentation fault. Core dumped.
(odpovědět)
D@N | E-mail | ICQ 22316335930.4.2007 19:02

Zpět
Svou ideální brigádu na léto najdete na webu Ideální brigáda
 
 
 

 
BBCode