Я пытаюсь найти наиболее эффективный способ поиска тегов в заданном массиве символов. Эти «теги» представляют собой последовательность символов, расположенных случайным образом в массиве символов.поиск последовательности символов в C в цикле
Приведен пример массива символов: {'a','s','s','1','m','s','g','e','x','x','r','s','1',...}
. тег "ss1"
указывает начало сообщения, содержащего каждый символ, до тех пор, пока не будет найдена последовательность "exx"
, которая является тегом для конца сообщения и продолжает поиск массива для следующей последовательности «s1». В этом примере сообщение «msg».
мой первоначальный дизайн был (псевдокод)
while(array[i] != '\0')
if(array[i] == 's' && array[i+1] == 's' && array[i+2] == '1' )
int j = i+3;
if(array[j] != '\0' && array[j] == 'e' && array[j+1] == 'x' && array[j+2] == 'x')
i += 3;
else
print(array[j]);
else i++; //next char
может быть немного недостатков, но вы получите идею. Есть ли способ лучше? Я думал о strstr, но поскольку я имею дело с массивом символов здесь и продолжаю цикл даже после расшифровки сообщения, я думал, что это может быть сложно реализовать.
может быть вложены теги? что-то подобное приемлемо? msg_start _..... innerloopmessage ... msg_eng _.... –
no @RaviSankarRaju –
Ну для начала вы индексируете прошлое конца массива. Что, если останется один персонаж? Поэтому 'array [i]' is '' x'' например, и 'array [i + 1]' is ''\ 0''. Поэтому вы проверяете, является ли 'array [i]' '' \ 0'', а это не так. Затем переходите к рассмотрению * трех * записей, когда вы только знаете, что один из них доступен. Это, вероятно, нарушение прав доступа. Он будет * вероятно * работать, но это не гарантируется, и это очень неряшливое кодирование. Никогда, никогда не пытайтесь читать мимо конца массива. Хуже того, вы продолжаете еще больше с 'j'. –