Avatar billede mad_man Nybegynder
31. december 2003 - 12:07 Der er 21 kommentarer og
1 løsning

sammenligne strings

jeg har har 2 strings der skal sammenlignes... eller fatisk kun starten at den ene string skal være den anden f.eks.

1: PING :2348798273

2: PING

hvordan får jeg lavet noget ligende:


if( strstr(recvbuf,ping) != NULL )
        {
                recvbuf[2] = 'O';
                strcpy(buf,recvbuf);
                strcat(buf,Memo1->Text.c_str());
                strcat(recvbuf," test");
                strcat(recvbuf,"\r\n");

                Memo1->Text = buf;

                test = send(thesocket,recvbuf,strlen(buf),0);
                if(test == INVALID_SOCKET)
                      {
                              WSACleanup();
                              return;
                      }
        }
        else
        {
                strcpy(buf,recvbuf);
                strcat(buf,Memo1->Text.c_str());
                Memo1->Text = buf;
                Edit1->Text = "";
        }

det her virker ik helt
Avatar billede arne_v Ekspert
31. december 2003 - 12:11 #1
Jeg tror at du mener:

if( strstr(recvbuf,ping) == recvbuf )
Avatar billede mad_man Nybegynder
31. december 2003 - 12:12 #2
det virker ikke
Avatar billede mad_man Nybegynder
31. december 2003 - 12:13 #3
sammenligner den ikke HELE stringsene... jeg skal jo kun se efter om at det er der i...
Avatar billede arne_v Ekspert
31. december 2003 - 12:16 #4
strstr(recvbuf,ping) == recvbuf

vil returnere true, hvis indholdet af recvbuf starter med hele indholdet
af ping

Var det ikke det du ville ?
Avatar billede mad_man Nybegynder
31. december 2003 - 12:16 #5
jov
Avatar billede arne_v Ekspert
31. december 2003 - 12:16 #6
sammenligne hele strengene ville være:

strcmp(recvbuf,ping) == 0
Avatar billede arne_v Ekspert
31. december 2003 - 12:17 #7
Et alternativt approcah vile være:

strncmp(recvbuf,ping,strlen(ping)) == 0
Avatar billede arne_v Ekspert
31. december 2003 - 12:18 #8
Og husk at alle sammenligner er case sensitive
Avatar billede mad_man Nybegynder
31. december 2003 - 12:18 #9
ja det har jeg husket

if (strstr(recvbuf,ping) == recvbuf)
{
bla bla
}
else
{
bla bla
}

skulle det ik virke
Avatar billede mad_man Nybegynder
31. december 2003 - 12:19 #10
char recvbuf[1024];
    int test;
    char buf[10000] = "";
    char ping[4] = "PING";
    while(1)
    {
        memset(recvbuf, 0, 1024);
        test = recv(thesocket,recvbuf,256,0);
        if(test == INVALID_SOCKET)
      {
            WSACleanup();
            return;
      }
        if( strstr(recvbuf,ping) == recvbuf )//!= NULL )
        {
                recvbuf[2] = 'O';
                strcpy(buf,recvbuf);
                strcat(buf,Memo1->Text.c_str());
                strcat(recvbuf," test");
                strcat(recvbuf,"\r\n");

                Memo1->Text = buf;

                test = send(thesocket,recvbuf,strlen(buf),0);
                if(test == INVALID_SOCKET)
                      {
                              WSACleanup();
                              return;
                      }
        }
        else
        {
                strcpy(buf,recvbuf);
                strcat(buf,Memo1->Text.c_str());
                Memo1->Text = buf;
                Edit1->Text = "";
        }
    }
Avatar billede arne_v Ekspert
31. december 2003 - 12:21 #11
char ping[4] = "PING";

skal ihvertfald være:

char ping[5] = "PING";
Avatar billede arne_v Ekspert
31. december 2003 - 12:22 #12
4 bogstaver + 1 nul byte = 5

men brug:

char ping[] = "PING";

så tæller den selv !
Avatar billede arne_v Ekspert
31. december 2003 - 12:22 #13
#include <iostream>
#include <string.h>

using namespace std;

int main()
{
  char s1[] = "PING :2348798273";
  char s2[] = "PING";
  cout << (strcmp(s1,s2)==0) << endl;
  cout << (strstr(s1,s2)==s1) << endl;
  cout << (strncmp(s1,s2,strlen(s2))==0) << endl;
  return 0;
}

giver korrekt:

0
1
1
Avatar billede mad_man Nybegynder
31. december 2003 - 12:22 #14
ja og så skal jeg have recvbuf[2] = 'O'; til og være recvbuf[1] = 'O';
den skal nemlig svare pong
Avatar billede mad_man Nybegynder
31. december 2003 - 12:24 #15
nu virker det...
smid lige et svar
Avatar billede mad_man Nybegynder
31. december 2003 - 12:31 #16
hvordan finder man så noget der er inde i miden af en string... kan man det
Avatar billede arne_v Ekspert
31. december 2003 - 12:42 #17
svar
Avatar billede arne_v Ekspert
31. december 2003 - 12:42 #18
Ja - array index starter med 0 i C
Avatar billede mad_man Nybegynder
31. december 2003 - 12:43 #19
kan man godt lave en der reagere på PING hvis der står bla bal PING bla bla
Avatar billede arne_v Ekspert
31. december 2003 - 12:43 #20
char s[] = "PING";
char s2[5];
strncpy(s2,s+1,2);
s2[2] = '\0';

skulle give s2 værdien "IN"
Avatar billede arne_v Ekspert
31. december 2003 - 12:47 #21
Hvis du vil fange "bla bal PING bla bla" skal du bruge

strstr(recvbuf,ping) != NULL
Avatar billede mad_man Nybegynder
31. december 2003 - 12:48 #22
ok tak
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