2009-12-06 52 views
0

不幸的是,我繼承了一些代碼(c/C++),它執行一些字符串操作,現在我需要將它複製/移植到php中,以便通過互聯網訪問此功能。如何在PHP中「添加」字符串 - 不是連接,而是「添加」它們。 (好像每個字符都是基數爲36的數字)

具體來說,該功能需要一些任意字符串並將它們「添加」在一起。 (c代碼迭代了字符數組,然後執行一些檢查以確保它們在字母數字範圍內)

我無法找到有關如何執行此操作的具體代碼示例(我不是PHP開發人員) - 任何人都可以指點我一些資源來解釋這個嗎? (基本上怎麼做字符串/字符數組操作)

編輯

針對一些意見和答案: 我想要的結果以ASCII碼,但本質上我會加入基地36號。

C代碼,現在轉換成基礎(從ASCII) 然後補充說:「」每個元素在一起(不攜帶36 - 雖然原作者打算 - 和它的一些奇怪的原因,並在從最「添加」至少顯着) 然後轉換回ascii。 字符串可以有不同的長度

基於目前的答案,我認爲我有足夠的我需要的東西。有時候學習一門新語言總是令人沮喪 - 你確切地知道你想要什麼,並且你可以用其他語言來完成,而不是用於手頭任務的那一種......

感謝迄今的迴應。

+2

這是兩個基數的36位數的加法嗎?問題不明確。 – 2009-12-06 07:01:22

+0

是的,這基本上就是我想要做的。 – Tim 2009-12-06 16:09:18

回答

3

你不能只是base_convert()他們嗎?

$sum = base_convert($str1, 36, 10) + base_convert($str2, 36, 10); 
$sum36 = base_convert($sum, 10, 36); 

還是你需要任意精度?這裏有一個任意的精度加法,基數爲36:

function b36_add($str1, $str2) 
{ 
    $to10 = array(); 
    for ($i = 0; $i < 36; ++$i) 
    { 
     $to10[base_convert($i, 10, 36)] = $i; 
    } 

    $len = max(strlen($str1), strlen($str2)); 
    $str1 = str_repeat('0', $len - strlen($str1)) . $str1; 
    $str2 = str_repeat('0', $len - strlen($str2)) . $str2; 

    $pos = $len - 1; 
    $carry = 0; 
    $sum = ''; 

    do 
    { 
     $tmp = base_convert($carry + $to10[$str1[$pos]] + $to10[$str2[$pos]], 10, 36); 
     $sum .= substr($tmp, -1); 
     $carry = (int) substr($tmp, 0, -1); 
    } 
    while (--$pos >= 0); 

    $sum = strrev($sum); 
    if ($carry) 
    { 
     $sum = base_convert($carry, 10, 36) . $sum; 
    } 
    return $sum; 
} 
+0

看起來像它會爲我工作。我不熟悉php。謝謝 – Tim 2009-12-06 16:08:39

3

如果你有一個這樣的字符串在PHP中,你可以叫個別字符的指數,像這樣:

<? 
    $x = "Hello"; 
    print $x[0] . "\n"; 

所以,換句話說,$ string_var [N]給你的第n個字符,0 -索引。

+0

沒錯,但是接下來怎麼做字符串的「添加」? – Tim 2009-12-06 16:10:10

1

首先,我假設你想添加ascii值。

ord()可能會幫助你。根據對方的回答,是這樣的:

<?php 
function addStrings($x, $y){ 
    // Assumes that both strings are the same length 
    for($i=0; $i<strlen($x); $i++){ 
    $result[i] = ord($x[i]) + ord($y[i]); 
    } 
    return $result; 
} 
?> 

如果你使用這個,你可能會想要做的事,如果$ x和$ y是不同的長度,但我覺得它橫跨有想法。

+0

是的,在c代碼中,它們被轉換爲基數36,然後轉換回ascii。 謝謝 – Tim 2009-12-06 16:10:58

相關問題