您好,登錄后才能下訂單哦!
這篇文章主要介紹了Perl字符串和排序怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
Perl字符串和排序
1、使用索引尋找子串
Perl語言中查找的方法依賴于查找的地方。如果在一個大字符串中查找,那很幸運的,index函數可以幫你的忙。字符位置是從0開始編號的。
$where=index($big,$small);查找子串***次在大字符串中出現的地方,返回***個字符的位置,如果子串不存在,則返回-1。可以將位置數(positionnumber)想象成找到此子串所經過的字符。
my$where2=index($stuff,“w”,$where+1);#$where得到6,第三個參數給出了返回值的極小值。
你可能想知道某個子串***出現的位置。可以使用rindex函數來做到,返回距離字符串頭的位置。
2、Perl語言中substr操作子串
substr只處理部分的字符串。$part=substr($string,$initial_position,$length);
一個字符串,一個從0開始編號的初始位置,以及子串的長度。返回值是一個子串。
如果請求的長度超過了字符串的長度,得到的是一個比你所希望的更短的結果。如果想明確要求到達字符串的結尾處,無論其或長或短,可以省略掉第三個參數。
初始位置可以是負的,表示從字符串結尾處開始(此時,-1表示***一個字符)
字符串中選擇的相應位置是可以改變的:
my$string=“Hello,world!”;
substr($string,0,5)=“Goodbye”;#$string現在變成了“Goodbye,world!”
substr($string,-20)=~s/fred/barney/g;
susbtr:使用4個參數,第四個參數是替換的字符串:
my$previous_value=substr($string,0,5,“Goodbye”);
3、Perl語言中sprintf
sprintf函數的參數和printf的參數完全相同(除了可選的文件句柄外),但它返回的是被請求的字符串,而非打印出來。這對于希望將某個格式的字符串存入變量以供將來使用的情況非常方便。
my$data_tag=sprintf“%4d/%02d/%02d%02d:%02d:%02d”,$yr,$mo,$da,$h,$m,$s;
$date_tag得到像“2038/01/193:00:08”這樣的值。格式化數字中的前置0的含義是,如果需要,在前面加上0,使之達到需要的寬度。
4、subbig_money
{
my$number=sprintf“%.2f”,shift@_;
1while$number=~s/^(-?\d+)(\d\d\d)/$1,$2/;#在do-nothing循環中,每一次加入一個逗號
$number=~s/^(-?)/$1\$/;#將美元符號放入合適的位置
$number;
}
5、Perl語言中高級排序
排序子程序返回一個值,表明這兩個元素如何比較的。如果在最終結果中$a出現在$b之前,則其排序子程序返回-1。如果$b出現在$a之前,則返回1。如果$a和$b的順序無關緊要,則子程序返回0。
subby_number{
if($a<$b){-1}elsif($a>$b){1}else{0}
}
要使用一個排序子程序,將它(不使用&)放在關鍵字sort和你要排序的列表之間。
my@result=sortby_number@some_numbers;許多的排序子程序的名字都由by_開頭,來描述如何排序
我們不需要在排序子程序中申明$a和$b,以及給它們設置。如果做了,子程序將不能得到正確結果。我們讓Perl為我們給$a和$b賦值,我們只需要寫如何比較。
三向的比較數字操作符:太空船(spaceship)符號(<=>)。這個操作符比較兩個數字,按照數字將其排序,并返回-1,0,1。subby_number{$a<=>$b}
字符串的三向操作符:cmp
subcase_insenstive{“\L$a”cmp“\L$b”}大小寫無關的排序
當你的排序子程序像我們這里的那樣簡單時,你可以通過使用“inline”子程序來代替排序的名字,使之更簡單,如:my@numbers=sort{$a<=>$b}@some_numbers;在當代的Perl程序中,幾乎見不到獨立的排序子程序。
my@descending=reversesort{$a<=>$b}@some_numbers;按照數字的降序方式排序
my@descending=sort{$b<=>$a}@some_nubmers;按照數字的降序方式排序
6、hashes中使用sort時,只是對hash的keys排序(按照字母表順序排序)。現在我們將對hash的keys排序,其順序由其對應的hash中的值決定。
subby_socre{$score{$b}<=>$score{$a}}
my%score=(“barney”=>,“fred”=>205,“dino”=>30);
my@winners=sortby_scorekeys%score;
subby_score_and_name{
$score{$b}<=>$score{$a}#按照降序的成績
or
$acmp$b;#字母順序的名字
}Perl語言中排序子程序可以有多級。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Perl字符串和排序怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。