2014-12-04 2 views
2

например: если я хочу знать, содержит ли строка a строку «qwerty», есть ли простой способ сделать это в системном verilog? как ниже код в C?Как искать строку внутри другой строки в системном verilog?

a.strstr("qwerty"); 
+0

Несмотря на то, что этот вопрос был дан долгое время, я подумал, что было бы полезно поместить ссылку на этот [другой связанный вопрос] (https://stackoverflow.com/questions/44948561/system-verilog-regular- выражения), которые r Получил очень всесторонний/полезный ответ. – AndresM

ответ

1

Вы можете использовать svlib библиотеку из Verilab, что оборачивает функции C мы знаем и любим в SystemVerilog функции. Он предоставляет свой собственный Str класс, который может сказать вам, если строка содержит определенную подстроку:

Str my_str = Str::create(a); 
if my_str.first("qwerty") 
    $display("found it"); 

Вы можете найти svlib на this location

+0

UVM также предоставляет аналогичное средство для сопоставления регулярных выражений с использованием DPI, если вы уже используете это. Посмотрите на функции в 'uvm_svcmd_dpi.svh'. –

+0

@ Tudor Timi- whihch одна из функций? – sara8d

3

В настоящее время я делаю так, это работает. но мне интересно, если есть лучший способ ...

int len = a.len(); 
for(int i =0; i < len;i++) begin 
    if(a.substr(i,i+6-1) =="qwerty") 
     $display("found it"); 
end 
0

На основании ответа на awill я закодированы эти две функции:

function int contains(string a, string b); 
    // checks if string A contains string B 
    int len_a; 
    int len_b; 
    len_a = a.len(); 
    len_b = b.len(); 
    $display("a (%s) len %d -- b (%s) len %d", a, len_a, b, len_b); 
    for(int i=0; i<len_a; i++) begin 
    if(a.substr(i,i+len_b-1) == b) 
     return 1; 
    end 
    return 0; 
endfunction 


function int startswith(string a, string b); 
    // checks if string A starts-with string B 
    int len_b; 
    len_b = b.len(); 
    if(a.substr(0, len_b-1) == b) 
    return 1; 
    return 0; 
endfunction 
Смежные вопросы