Я попытался найти в массиве значение, поступающее с сервера java. Сервер отправляет данные после нажатия на кнопку, и это значение принимается в estratto
который является массивом символов.
Мне нужно найти estratto
в массив строк numeri
или в строковую переменную number
,
Как я могу это сделать?
Вот мой код:
char estratto[2048];
int pos=-1;
char message[2048] = "";
//-- some code
while(recv(sock, buff, sizeof(buff),0) > 0){
strcat(message,buff); // received message form client
}
//-- some code
//-- divided message into a string array
istringstream iss(message);
string token;
string numeri[15];
int i=0,j=0,e=0;
while (std::getline(iss, token, ','))
{
numeri[i]= token.c_str();
i++;
}//-- the part that has problems
string number(message);
while(recv(sock, estratto, sizeof(estratto),0)>0){
for(i=0; i<15; i++){
pos=number.find(estratto);
if(pos>0)
cout<<"TROVATO!"<<endl;
if(strcmp(numeri[i].c_str(),estratto)==0){
trovati_cartella[i]=1;
cout<<"TROVATO!"<<endl;
}
}
}
соиЬ <<«Trovato!» << епсИ; не работает, если я пытаюсь изменить некоторые части этого кода. Кто-то может помочь мне найти решение?
Вы сталкиваетесь с проблемой неподписанного или подписанного набора символов? Вам может понадобиться кодировать и декодировать строку в соответствии со стандартом 64-битного кодирования.
Я бы изменил код следующим образом:
while(recv(sock, estratto, sizeof(estratto),0)>0){
for(i=0; i<15; i++){
pos=number.find(estratto);
if(pos != std::string::npos)
cout<<"TROVATO!"<<endl;
if(strstr(numeri[i].c_str(),estratto) != NULL){
trovati_cartella[i]=1;
cout<<"TROVATO!"<<endl;
}
}
}
Ваша первая проверка «pos> 0» неверна, потому что, если строка чисел содержится в числовой строке, начиная с индекса 0, ваша проверка не найдет ее.
Ваша вторая проверка с помощью функции strcmp () вместо этого перехватит строку estratto, только если она точно совпадает со строкой цифр [i], но не если она является подстрокой.