2016-03-07 5 views
0

Я попытался найти в массиве значение, поступающее с сервера java. Сервер отправляет данные после нажатия кнопки, и это значение принимается в estratto, который является массивом символов. Мне нужно найти estratto в массив строк numeri или в строковую переменную number.Как получить значение в массив с помощью C++?

Как я могу это сделать?

Вот мой код: "Trovato"

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;   
        } 
       } 
      } 

соиЬ < < < < endl; не работает, если я попытаюсь изменить некоторые части этого кода. Кто-то может помочь мне найти решение?

+0

Что вы подразумеваете под "не работает"? Вы ничего не получаете? Неправильный вывод? Построить ошибки? Пожалуйста, уточните и сообщите нам подробности. Также укажите типы всех задействованных переменных и, возможно, их инициализацию. –

+0

О, и, кстати, вы знаете, что строки C-стиля (которые, я полагаю, вы получаете с сервера) должны быть прерваны символом '' \ 0''? Получены ли данные, которые вы получили, таким образом? –

+0

@JoachimPileborg Я не вижу выход 'cout <<" Trovato! " << endl; ' –

ответ

-1

Я хотел бы изменить код так:

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;   
       } 
      } 
     } 

Ваш первый чек «поз> 0» является неправильным, потому что если estratto строка содержится в номер строки, начиная с индекса 0, ваш чек не найдет. Ваша вторая проверка функцией strcmp() вместо этого будет ловить строку estratto только в том случае, если она точно соответствует строке numi [i], но не если она является подстрокой.

+0

Downvote для отказа от решения самой большой проблемы с кодом. – SergeyA

+0

@SergeyA какой? Зачем ? –

+0

@SilviaB, потому что вам было сказано несколько раз, когда вы звоните, как вы это делаете, вы не знаете, что будет в переменной «estratto». В строке может быть только 1-й символ, за которым следует мусор. – SergeyA

0

Вы работаете в неподписанном или подписанном наборе символов. Вам может потребоваться кодировать и декодировать строку с помощью стандартного кодирования 64-битного кода.

 Смежные вопросы

  • Нет связанных вопросов^_^