Avatar billede quiw Nybegynder
30. november 2006 - 15:17 Der er 8 kommentarer og
1 løsning

Split string ved første mellemrum.

Hejsa Eksperter, jeg har kigget et par andre poster igennem, og synes eksemplerne er lidt for kompliceret.
Jeg vil gerne bede om en kodestump som udføre nedestående eksempel, på kortest og nemmeste mulige måde:


----------------------------------------
char command;
char chatbesked;

If (command starter med "/say")
{
  cout << chatbesked;
}
else
{
  cout << "Ukendt command";
}

----------------------------------------

Så jeg i konsolen får noget lignende:

Input:
/say Dette er en chatbesked

Output:
Dette er en chatbesked


- På forhånd tak for hjælpen :)
Avatar billede simplus Nybegynder
30. november 2006 - 15:24 #1
Prøv følgene:

char str[]  = "/say Hello World";

char *first  = strtok(str, " ");

char *second = strtok(NULL, "\0");

det skal ind i main :-)
Avatar billede arne_v Ekspert
30. november 2006 - 15:26 #2
if(strstr(str,"/say ")==str)
{
  cout << (str+5) << endl;
}

maaske
Avatar billede quiw Nybegynder
30. november 2006 - 15:30 #3
Jeg får desværre bare en fuld stæning som hedder "/say Hello World".
Avatar billede quiw Nybegynder
30. november 2006 - 15:38 #4
Arne_v - Det virker faktisk ganske udmærket :)

Nu kommer dilemmaet, hvem af jer skal have point? :)
Avatar billede simplus Nybegynder
30. november 2006 - 15:43 #5
Der er skam intet dilemma. For det første virkede arne's - det gjorde min ikke. For det andet samler jeg ikke på point, jeg vil bare gerne hjælpe.

:-)
Avatar billede quiw Nybegynder
30. november 2006 - 15:45 #6
Jamen det er jo dejligt at der er nogle der vil hjælpe :)
- Mange Tak til jer begge. Det var begge ting noget jeg kunne bruge :)
Avatar billede arne_v Ekspert
01. december 2006 - 01:47 #7
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char str[]  = "/say Hello World";
    if(strstr(str,"/say ")==str)
    {
        cout << (str+5) << endl;
    }
    char *first  = strtok(str, " ");
    if(strcmp(first,"/say")==0)
    {
        char *second = strtok(NULL, "");
        cout << second << endl;
    }
    return 0;
}

virke rnu fint hos mig
Avatar billede arne_v Ekspert
01. december 2006 - 01:47 #8
og et svar
Avatar billede v0id Nybegynder
14. december 2006 - 06:56 #9
Det skal lige siges at arne_v's metode kun virker med "/str".
Hvis man evt. skulle tilføje andre kommandoer, ville det være bedre at lave det "dynamisk" (eller hvad skal vi kalde det?), så man ikke hardcoder 5-tallet ind.
Her er et eksempel:

#include <iostream>
#include <cstring>

#define DISPLAY "/display"
#define SAY    "/say"
#define SHOUT  "/shout"

int main()
{
    char str[] = "/display Hello World";
    if(strstr(str, DISPLAY) == str)
    {
        std::cout << (str+(strlen(DISPLAY)+1)) << std::endl;
    }
   
    system("PAUSE");
    return 0;
}

Her bruger vi strlen() til at få længden af den bestemte kommando, så nu kunne vi skifte det ud med SHOUT, SAY eller whatever, uden at outputtet ville blive noget som "t Hello World" (ved brug af SHOUT).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester