2015-09-20 13:52:40 +00:00
/*
* Author: bovine3dom
* Determines whether one string matches another and how many characters match. Case insensitive.
2015-01-16 23:21:47 +00:00
*
2015-09-20 13:52:40 +00:00
* Arguments:
* 0: stringA <STRING>
* 1: stringB <STRING>
*
* Return Value:
2017-06-08 13:31:51 +00:00
* Number of matching characters <NUMBER>
*
* Example:
* ["a", "b"] call ace_common_fnc_stringCompare
2015-09-20 13:52:40 +00:00
*
* Public: Yes
2015-01-16 23:21:47 +00:00
*/
#include "script_component.hpp"
2015-09-20 13:52:40 +00:00
params ["_string", "_searchTerm"];
2015-01-16 23:21:47 +00:00
2015-09-20 13:52:40 +00:00
_string = toLower _string; // removes case sensitivity
_searchTerm = toLower _searchTerm;
2015-12-14 12:08:19 +00:00
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;
2015-09-20 13:52:40 +00:00
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
2015-01-18 19:09:19 +00:00
_matchingCharacters = _matchingCharacters + 1;
_searchIterator = _searchIterator + 1
2015-01-16 23:21:47 +00:00
};
2015-09-20 13:52:40 +00:00
2015-01-16 23:21:47 +00:00
_targetIterator = _targetIterator + 1; // Look at the next character in the string
};
2015-09-20 13:52:40 +00:00
_matchingCharacters