ACE3/addons/common/functions/fnc_stringCompare.sqf

40 lines
1.3 KiB
Plaintext

/*
* Author: bovine3dom
* Determines whether one string matches another and how many characters match. Case insensitive.
*
* Arguments:
* 0: stringA <STRING>
* 1: stringB <STRING>
*
* Return Value:
* Number of matching characters >NUMBER>
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_string", "_searchTerm"];
_string = toLower _string; // removes case sensitivity
_searchTerm = toLower _searchTerm;
private _arraySearchTerm = toArray _searchTerm; // splits string into array of unicode decimals
private _arrayString = toArray _string;
private _sizeSearchTerm = count _arraySearchTerm; // We only measure the array once
private _sizeString = count _arrayString;
private _matchingCharacters = 0;
private _searchIterator = 0;
private _targetIterator = 0;
while {_searchIterator < _sizeSearchTerm && _targetIterator < _sizeString} do { // Prevents us from going out of bounds
if (_arraySearchTerm select _searchIterator == _arrayString select _targetIterator) then { // If we have a match, start looking for the next character in the search term
_matchingCharacters = _matchingCharacters + 1;
_searchIterator = _searchIterator + 1
};
_targetIterator = _targetIterator + 1; // Look at the next character in the string
};
_matchingCharacters