CMake 中两个字符串的最大公共前缀

问题描述 投票:0回答:1

我需要使用 CMake 找到两个字符串的最大公共前缀。我还没有使用 CMake 找到任何有关它的信息。 CMake 本身非常有限,所以我想知道最好的方法。

cmake
1个回答
1
投票

查找最大公共前缀通常是通过从两个字符串的开头开始的 O(n) 线性搜索来完成的。 CMake 允许使用 if 命令 和 LESS/GREATER/.. 比较数字和字符串。这允许实现查找最大公共前缀的标准方法:

function( largest_common_prefix a b prefix )

# minimum of lengths of both strings
string( LENGTH ${a} len_a )
string( LENGTH ${b} len_b )

if( ${len_a} LESS ${len_b} )
    set( len ${len_a} )
else()
    set( len ${len_b} )
endif()

# iterate over the length
foreach( end RANGE 1 ${len} )
    # get substrings
    string( SUBSTRING ${a} 0 ${end} sub_a )
    string( SUBSTRING ${b} 0 ${end} sub_b )
    
    # if equal store, otherwise break
    if ( ${sub_a} STREQUAL ${sub_b} )
        set( ${prefix} ${sub_a} PARENT_SCOPE )
    else()
        break()
    endif()
endforeach()

endfunction()
© www.soinside.com 2019 - 2024. All rights reserved.