2014-01-14 4 views
1

Мне нужно добавить запятую в каждую строку, хранящуюся в массиве, в соответствии с position, которая хранится в byteSizeBuffer.Добавление запятых к набору строк, хранящихся в массиве

std::string::iterator it; 
    int position = 0; 
    int totalSize = 0; 
    for (int i = 0; i < numOfMPs+1; i++) 
    { 
     for (int j = 0; j < numOfMPs; j++) 
     { 
      if(totalSize < subSize) 
      { 
       switch(byteSizeBuffer[j]) { 
        case 2: 
         position = totalSize+4; //4 because in the string each byte is 2 characters (2*2=4) 
         totalSize = position; 
         it = sub_[i].begin()+position, ','; //inserts comma at iterator+position 
         break; 
        case 4: 
         position = totalSize+8; 
         totalSize=position; 
         it = sub_[i].begin()+position, ','; 
         break; 
        default: 
         cout << "An error has occured while splitting the Data"; 
         break; 
       } 
      } 
     } 
    } 
  1. Положения является положением, которое я хочу запятая должна быть вставлена.
  2. TotalSize это сумма позиций и не может превышать subSize
  3. subsize всегда и даже число и всегда 34 байт ~ 68 символов
  4. Запятые добавляются к одной и той же позиции для каждого строки в массиве.

Строки выглядеть следующим образом: FG454F3423T5245G4G5H6546456Y54645G4456G45G60101000000101010111000001

The позиций, хранящихся в bytesizeBuffer [] сохраняются в виде либо 2 или 4, которые представляют собой число байтов.

Так что если сохраненные цифры были 4,4,4,4,2,4,4,2,2,2,2, мне нужно, чтобы это выглядело так: FG454F34,23T5245G, 4G5H6546,456Y5464,5G44,56G45G60 , 10100000,0101,0101,1100,0001 .......... Никакой запятой не следует добавлять в конце строки.

Мой вышеприведенный код, похоже, не работает, и мне было интересно, правильно ли я это делал или, возможно, был более эффективный способ сделать это.

Только несколько советов/указателей, чтобы получить меня на правильном пути, действительно то, что я ищу. Thanks

+0

Просто проведите по строкам 'bytesizeBuffer', построив вторую строку из первой. Я понятия не имею, почему вы думаете, что вам нужен вложенный цикл! – Roddy

+0

'it = sub_ [i] .begin() + position, ','; // вставляет запятую в iterator + position'. Помимо определения нового значения 'it', это ничего не делает. – Roddy

+0

@Roddy У меня есть 2 массива. первая содержит несколько строк, а вторая содержит несколько позиций, в которых запятые должны идти. Поэтому первый цикл проходит через массив строк, а второй - через byteSizeBuffer (или массив позиции). – tc90

ответ

0
std::string::iterator it; 
    int position = 0; 
    int totalSize = 0; 
    for (int i = 0; i < numOfMPs+1; i++) 
    { 
     for (int j = 0; j < numOfMPs; j++) 
     { 
      /* mp_subSize*2: each byte is 2 chars long so we have to get the full 
      * length of the string according to the characters 
      * +numOfMPs-1: adds the numOfMPs and then subtracts the final size from the buffer and -1 for the comma 
      * so that there is no comma added at the end of the string. 
      */ 
      if(totalSize < _subSize*2+numOfMPs-(byteSizeBuffer[count-1]*2)-1) 
      { 
       switch(byteSizeBuffer[j]) { 
        case 2: 
         position = totalSize+4; //4 because in the string each byte is 2 characters (2*2=4) 
         totalSize = position+1; //number of bytes +1 for the comma 
         break; 
        case 4: 
         position = totalSize+8; 
         totalSize=position+1; 
         break; 
        default: 
         cout << "An error has occured while splitting the Data"; 
         break; 
       } 
       //this line adds the comma 
       it = sub_[i].insert(sub_[i].begin()+position, ','); 
      } 
     } 
     totalSize=0; 
     position=0; 
    } 

Более эффективным способом было бы поместить это в функцию как @Roddy сказал в комментариях. Тем не менее, это то, что я придумал, и это работает.

1

Вы можете использовать std::string::insert.
http://en.cppreference.com/w/cpp/string/basic_string/insert

Кроме того, не забывайте, что после каждой вставки размер вашей строки изменяется и, следовательно, позиции всех элементов движения.

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