2015-09-11 4 views
0

Кажется, это должно быть довольно просто, но я борюсь с этим вопросом. Я пытаюсь поменять 2 элемента массива символов (предпочитают не использовать указатели) очень определенным образом. У меня есть массив, называемый buffer, в котором есть текстовая строка. Если индекс нечетный, тогда этот элемент нужно поменять местами с помощью «зеркального аналога» (т. Е. Если индекс является буфером [5]), тогда его необходимо заменить 5-м элементом с конца массива. . псевдокод для него, но я не могу реализовать Вот моя трещина на него (это, наверное, ужасный код, заметьте):Элементы свопинга в массиве символов

while(i<strlen(buffer)/2){ 
     if(i%2 ==1){ 
      temp = buffer[i]; 
      buffer[i] = buffer[strlen(buffer)-i-1]; 
      buffer[strlen(buffer)-i-1] = temp; 
     } 
     i++; 
    } 

Вот псевдо-код для дальнейшего уточнения:

for each char resp[x] in the sending buffer resp 
    if the index of resp[x] is odd // resp[0] is the first element, hence its index is 1 (i.e., odd) 
     switch the value of resp[x] and resp[len(resp)-x-1]; 
    endif 
end for 

EDIT

Questio n, что у меня есть, как мне поменять элементы массива? Попытка этот метод не совсем очистить мой массив, как я хочу ... Это алгоритм дешифровки, и я пытаюсь использовать его, чтобы выправить зашифрованный текст, который находится в buffer[]

EDIT2

Вот скриншот того, что я получаю ... Первый набор разборчивого текста - это то, что является исходным текстом в массиве, второй - это перепутанный массив, а последний фрагмент текста - это то, что должно быть " Cleaned Up ", чтобы выглядеть как оригинальный текст с отметкой времени.

enter image description here

+0

Итак, в чем вопрос? –

+0

Похоже, он должен работать на меня. В чем проблема? Все повторяющиеся вызовы 'strlen()' - плохая идея, но, кроме того, это кажется прекрасным. – Barmar

+0

@Barmar Мой текст по-прежнему беспорядочен и неразборчив. Я мог бы назначить переменную для хранения длины текстовой строки так, чтобы она выглядела лучше, чем –

ответ

1

Просто поверните каждую позицию в накопительном пространство, это, в свою очередь, заполненный своей противоположностью, затем заполнить противоположный со значением в удерживающем пространстве. Это то, что вы делаете.

Вот вариант, который может быть легче читать:

int main(void) 
{ 
    char buffer[] = {"this is a string of characters"}; 
    char character=0; //holding space for jumping characters 
    int i,len,halfLen; 

    len = strlen(buffer);//do this only once 
    halfLen = len/2; 

    //reverse the characters in string 
    for(i=0;i<halfLen;i++) 
    { 
     character = buffer[i]; 
     buffer[i] = buffer[len-1 - i]; 
     buffer[len-1 - i] = character; 
    } 
    printf(buffer); 

    getchar(); 

    return 0; 
} 
+0

Это близко, m получая последние 25% сообщения в правильном порядке, включая метку времени, но остальное все еще смешано с разрывами строк. –

+0

@TravisPatterson - Я не могу сказать из вашего сообщения, можете ли вы сказать мне, как объявлен «буфер» и определяемый? т. е. он создан с достаточным пространством для хранения строки, которую он удерживает? _Two вещи для рассмотрения_, *** 1) *** строка C определяется как массив символов, завершенных символом '\ 0' (NULL) с haracter. Там должно быть достаточно места, чтобы содержать строку, а также терминатор NULL. *** 2) *** В буфер можно записать больше данных, чем для свободного пространства для буфера. Это вызовет неопределенное поведение. Вы встречали оба этих критерия с конкретной строкой, с которой вы сталкиваетесь? – ryyker

+0

Проблема была решена (как видно ниже), причина, по которой у меня только что был правильно упорядочен фрагмент моего сообщения, была связана с размещением скобки в середине подкачки. –

0

Я решил, что ... Оказывается, это была глупая опечатка с моей стороны.

while(i<strlen(buffer)/2){ 
    if(i%2 == 0){ 
     temp = buffer[i]; 
     buffer[i] = buffer[strlen(buffer)-i-1]; 
     buffer[strlen(buffer)-i-1] = temp; 
    } 
    i++; 
} 

- это то, что я должен был иметь. Моя ошибка пришла от условного заявления if блока должен быть if(i%2 == 0), а не «если (я% 2 == 1)», то у меня была опечатка в этой строке:

buffer[i] = buffer[strlen(buffer)-i-1]; 

я неуместны закрывающую скобку звонок strlen(), он как-то переместился между 1 и]. Мне также пришлось поменять i и 1 той же линии справа.

+0

_misplaced закрывающая скобка _... Хорошо, что бы это сделать :) (увидел это после того, как я оставил комментарий выше. Оставлю комментарий на всякий случай, когда это будет полезно кому-либо еще) – ryyker

+0

Ха-ха, и я просто ответил на ваш комментарий раньше видя этот комментарий здесь. –

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