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
Annonceindlæg fra SoftwareOne
31. december 2003 - 12:11
#1
Jeg tror at du mener: if( strstr(recvbuf,ping) == recvbuf )
31. december 2003 - 12:12
#2
det virker ikke
31. december 2003 - 12:13
#3
sammenligner den ikke HELE stringsene... jeg skal jo kun se efter om at det er der i...
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 ?
31. december 2003 - 12:16
#5
jov
31. december 2003 - 12:16
#6
sammenligne hele strengene ville være: strcmp(recvbuf,ping) == 0
31. december 2003 - 12:17
#7
Et alternativt approcah vile være: strncmp(recvbuf,ping,strlen(ping)) == 0
31. december 2003 - 12:18
#8
Og husk at alle sammenligner er case sensitive
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
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 = ""; } }
31. december 2003 - 12:21
#11
char ping[4] = "PING"; skal ihvertfald være: char ping[5] = "PING";
31. december 2003 - 12:22
#12
4 bogstaver + 1 nul byte = 5 men brug: char ping[] = "PING"; så tæller den selv !
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
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
31. december 2003 - 12:24
#15
nu virker det... smid lige et svar
31. december 2003 - 12:31
#16
hvordan finder man så noget der er inde i miden af en string... kan man det
31. december 2003 - 12:42
#17
svar
31. december 2003 - 12:42
#18
Ja - array index starter med 0 i C
31. december 2003 - 12:43
#19
kan man godt lave en der reagere på PING hvis der står bla bal PING bla bla
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"
31. december 2003 - 12:47
#21
Hvis du vil fange "bla bal PING bla bla" skal du bruge strstr(recvbuf,ping) != NULL
31. december 2003 - 12:48
#22
ok tak
Kurser inden for grundlæggende programmering