[نشاط] كتابة دوال لمعرفة عدد الكلمات في متغير نصــي

السلام عليكم يا عرب .

وجدت المساهمات بالمجتمع قد قلت بالفترة الاخيرة فوددت طرح موضوع بسيط نتشارك فيه كتابة برنامج بسيط يقوم بعد الكلمات في متغير نصي .

كل واحد يكتب ذلك باللغة التي يتقنها او التي يبرمج بها ,

من ناحيتي ساكتبها بلغة oracle pl/sql

Create or Replace Function 
    WordCount (v_InpStr In Varchar2)
    Return Pls_Integer
As
    v_WordCnt Pls_Integer := 0;
    v_StrLen  Pls_Integer := Nvl(Length(v_InpStr),0);
     In_A_Word Boolean;
Begin
    For v_Ctr in 1..v_StrLen + 1 Loop
        If Substr(v_InpStr, v_Ctr, 1) = ' ' or v_Ctr > v_StrLen Then
            If In_A_Word Then
                v_WordCnt := v_WordCnt +1 ;
                In_A_Word := False;
            End If;
        Else
        In_A_Word := True;
        End If;
    End Loop;
Return v_WordCnt;
End;

ولاستخدام هذا الدوال نقوم بالتالــي : SELECT WordCount ('hello arabia IO people') INTO ONE_KEY FROM DUAL;

شاركنا :)

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

بإستخدام javascript:

function wordsCount (){
    var string = "this is a sample string for example";
    var words = string.split(" ");
    var length = words.length;
    return length;
}
wordsCount();

لو استخدمت الريجيكس (regex) لكان أفضل لتتفادى احتساب مسافتين بكلمة:

function wordsCount (){

var string = "this    is a sample string for example";
var words = string.match(/\S+/g).length;
var length = words.length;
return words;

}

wordsCount();

إعتقدت انه يعيد لي 6 لانه حسب فهمي للكود فهو يعد المسافات ولكن بعد تطبيقه اعاد 7 :)

ولكن لو كان النص

string = "this is a sample string for example  ";

( اضافة فراغين )

سيرجع قيمة 9 .

بإستخدام الـ PHP :

function countword($text) {
    $ct = explode(" ", $text);
    for($i = 0;$i <= count($ct);$i++){
        if($ct[$i] != "") {
            $ctn = $ctn + 1;
        }
    }
return $ctn;
}

echo countword("Hello World Hello World Hello World     ");

يمكن تجربة الكود هنا :

أيضاً يمكن إستخدام :

if(!empty($ct[$i])) {

بدلاً من :

if($ct[$i] != "") {

حللت المشكلة السابقة بـ

if($ct[$i] != "")

صحيح ؟


انا لا اكتب هذه التعليقات للانتقاد بل للتعلم .

أجل ، فالشرط يقوم بتأكد من المصفوفة ، هل العنصر يحتوي على نص أو عنصر فارغ ")

ويمكن أيضاً حلها في الـ PHP بإستخدام دالة empty() :

if(!empty($ct[$i]))

باستخدام ruby:

text = "this is a sample string for example"
text_array = text.split
print "#{text_array.length} words"

python

wordCount = lambda s : len([p for p in s.split() if p!= ""])

جميل كنت اعلم ان بايثون سهلة وجميلة , ولكن الان قد تأكدت ’

هل فعلا هذا السطر يقوم بالمطلوب ؟

هل يحتسب الفراغ كلمة ام انه يتغاضى عنه فمثلا لو كان هنالك 3 فراغات متتالية هل يحذف تلك الفراغات ام يعدها ككلمة ؟


اسأل للاطلاع على لغات البرمجة المختلفة

تماما كما تسأل... مطابق لنفس المثال الذي كتبته انا بالجافاسكريبت ولو ان في البايثون استخدمت ال list comprehensive وفي الجافاسكريبت بفلترة القائمة

بالبايثون أيضا لكن بتصفية القائمة

wordCount = lambda s : len(filter(lambda v : v != "", s.split()))

js

wordCount = function (s) { return (s.split(" ").filter(function(v) {return v!= ""})).length }

C#

delegate int D(string s);
....
D wordCount =  s => s.Split(' ').Count(p => !p.Equals(String.Empty));

Haskell

wordCount :: String -> Int
wordCount = length . words

Ruby

def wordCount(s)
    s.split.select{|p| p if p != ""}.length
end

طريقة أفضل عبر الـ PHP ، بإستخدام دالة ()str_word_count :

echo str_word_count("Hello World Hello World Hello World     ");

-

لتجربة :

Python 3

Number_Word= lambda words : len(words.split())

print(Number_Word(" hello  word   "))