C , поиск APT_String и эффективность

#c #datastage

#c #datastage

Вопрос:

Начнем с того, что решение этого вопроса должно быть очень эффективным.

Моя проблема в том, что мне нужно сравнить определенные части двух APT_String файлов (тип DataStage). А именно, строки представляют собой фамилии, которые содержат символ пробела, такой как «Brown Marrow». Однако имена находятся в поле размером 30 байт, а оставшееся пространство заполнено символами пробела.

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

bool foundit = false;


for (int ind = 0; ind<=q_array[i].LAST_NAME.length() amp;amp; !foundit; ind ) {
if (q_array[i].LAST_NAME[ind] == ' ' amp;amp; q_array[i].LAST_NAME[ind 1] == ' ') {
cout<<"two spaces in a row at char " << ind << endl;

foundit = true;

}
}

К сожалению, в APT_String, похоже, нет функции find(), иначе я бы использовал это. Есть ли у кого-нибудь лучший или более эффективный способ сделать это?

Ответ №1:

Опять же, если вы хотите узнать, есть ли определенные символы в строке, вам нужно выполнить итерацию по ней. Другого шанса нет, Даже find and strcmp и whatelse делает это. Никаких шансов обойти этот цикл.

Теперь вы всегда можете обернуть это APT_String в свой собственный myAPT_String класс, в котором также есть size_t string_size член, которым вам нужно управлять, и использовать его для перехода к концу строки.

Комментарии:

1. Часть вопроса, касающаяся эффективности, предполагает, что find - это очень усовершенствованный метод, поскольку он включен в класс string C . Я знаю, что он будет повторяться по строке, но мне просто интересно, есть ли лучший способ сделать это, чем то, что я сделал. И почему вы говорите "снова"? Вы ведете себя так, как будто я уже задавал этот вопрос раньше...

2. @autotravis - Вы не единственный, кто задает здесь вопросы. 🙂 Не существует доступной магии для просмотра того, что находится в строке, не глядя на отдельные символы. В std::string слишком много примерно на сотню функций, так что это не очень хорошая модель.

3. @auto: Вопрос о том, где что находится в строке, задается слишком часто. 😉

4. @Bo: Хорошо, хорошо, я приношу извинения за то, что этот вопрос кажется похожим на другие. Все прекрасно, когда строку можно искать с помощью встроенных методов ее класса (которые, как я ошибочно предположил, должным образом проверены на большинстве языков). Я просто хотел убедиться, что мое домашнее решение было настолько эффективным, насколько это возможно.

Ответ №2:

Сканирование 30-байтового поля не может занять много времени, не так ли?

Если бы я искал конец имени, я бы начал с конца строки и сканировал в обратном порядке до первого пробела.