2014-03-13 5 views
0

주어진 문자와 규칙으로 단어를 생성하는 미니 프로그램을 개발해야했습니다. 나는 PHP에서 이것을했고 훌륭하게 작동하지만, 이제 C 또는 C++로 변환 된이 코드가 필요하다. 구현하려고 시도했지만 문자열 배열에 문제가 있습니다. 게다가, 저는 C, 심지어 C++에서도 좋지 않습니다. 누군가이 코드를 구현하도록 도와주세요. 내가 할 수 있다면 당신을 위해 슬픔을 줄 것입니다. 고맙습니다. 여기에 부착 된 코드입니다 : 내가 크기 변경할 수 배열을 나타냅니다 std::vector보고 제안C, C++ 코드로 단어를 생성하는 PHP 코드

<?php 

$val_n = array("S","D","R"); 
$val_t = array("a","b","c","d","f"); 

$reguli = array( 
    array("S" => "aS"), 
    array("S" => "bD"), 
    array("S" => "fR"), 
    array("D" => "cD"), 
    array("D" => "dR"), 
    array("R" => 'bR') 
    ); 

    $rez = array(); 
    $pas = array(); 
    $parcurgere = array(); 
    $parc_sf = array(); 

function generare($val_n, $reguli, $cuvint, $parcurgere) 
{ 
    global $rez; 
    global $pas; 
    global $parcurgere; 
    global $parc_sf; 


if(strlen($cuvint) >= 6) 
{  
    if($cuvint[strlen($cuvint) -1] == 'R') 
    { 
     $cuvint[strlen($cuvint) -1] = "f";   
     if(! in_array($cuvint, $rez)) 
     {     
      $rez[] = $cuvint; 
      array_push($parc_sf,$cuvint[strlen($cuvint) -1] = "f"); 
      array_push($pas,$parcurgere);         
     } 

    } else if($cuvint[strlen($cuvint) -1] == 'D') 
    { 
     $cuvint[strlen($cuvint) -1] = "d";   
     if(! in_array($cuvint, $rez)) 
     {  
      $rez[] = $cuvint; 
      array_push($parc_sf,$cuvint[strlen($cuvint) -1] = "d");    
      array_push($pas,$parcurgere); 
     } 
    } 
} else if($cuvint[strlen($cuvint) -1] != 'f' || $cuvint[strlen($cuvint) -1] != 'd') 
{   
    foreach($reguli as $reg) 
    { 
     if(isset($reg[substr($cuvint, -1)])) 
     {    
      $pasi = $reg[substr($cuvint, -1)];    
      array_push($parcurgere,$pasi);    
      $cuvint .= $reg[substr($cuvint, -1)]; 
      //$cuvint[strlen($cuvint)-3] = '';    
      generare($val_n, $reguli, $cuvint, $parcurgere);     
     } 
    }  
} 
} 

    $cuvint = "S"; 
    $pasi = ''; 

    generare($vn, $reguli, $cuvint, $parcurgere); 

?> 

답변

2

은.

연관 배열 (array ("S"=> "aS"))의 경우 std::map 또는 std :: unordered_map

을 볼 수 있습니다.