2014-06-13 33 views

cevap

7

%p aşağıdaki maçları C fonksiyonu ispunct (C source v 5.2) tarafından eşleştirilir:

041 ‘‘!’’  042 ‘‘ ’’  043 ‘‘#’’  044 ‘‘$’’  045 ‘‘%’’ 
046 ‘‘&’’  047 ‘‘’’’  050 ‘‘(’’  051 ‘‘)’’  052 ‘‘*’’ 
053 ‘‘+’’  054 ‘‘,’’  055 ‘‘-’’  056 ‘‘.’’  057 ‘‘/’’ 
072 ‘‘:’’  073 ‘‘;’’  074 ‘‘<’’  075 ‘‘=’’  076 ‘‘>’’ 
077 ‘‘?’’  100 ‘‘@’’  133 ‘‘[’’  134 ‘‘\’’  135 ‘‘]’’ 
136 ‘‘^’’  137 ‘‘_’’  140 ‘‘‘’’  173 ‘‘{’’  174 ‘‘|’’ 
175 ‘‘}’’  176 ‘‘~’’ 

6

küçük komut dosyası (man ispunct itibaren) onları bulmak için:

for i=0,255 do 
    if string.match(string.char(i), "%p") then 
     io.write(string.char(i)) 
    end 
end 
io.write("\n") 

-- $ luajit test.lua 
-- !"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~ 
9

Cevap yerel ayar bağımlı, doğrudan bir interf C fonksiyonuna as.
Aslında, Lua işlevine benzer bir şey yapan bir C standart işlevi varsa, Lua işlevinin yalnızca belirli bir duruma bakmadan bile C işlevini, siğilini ve tümünü tamamıyla sardığı bellidir.
(Bu nedenle bir parçasıdır file:read() hala 5.2 trouble reading text with embedded zeroes, hatta belki de 5.3 olacak vardır) Amaden "C" yerel ayar için iyi bir cevabım verdi ve ColonelThirtyTwo kontrol etmek doğru yolu verirken

yerele özgü, C standart sadece diyor ki:

ispunct(): ne isspace ne de isalnum doğru olduğu noktalama karakterleri bir bölgeye özgü bir dizi biridir herhangi baskı karakteri için ispunct fonksiyon testleri. "C" yerel ayarında, ispunct, nespace ne de isalnum un doğru olmadığı her yazdırma karakteri için true değerini döndürür