الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لدي طلب أحتاجه في مشروع تخرجي

بدأه moradpro في 21 مارس 2012 · 3 رد · 529 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي مشروع بعنوان "détection de plagiat entre codes sources c++ et java "

وطلبي هو كود يقوم بتحويل ملف سي بلس بلس الى sequence of tokens

مثال :


int factorial(int n) {
if (n == 0) return 1 ;
else return n * factorial(n-1) ;
}


يحول الى :

         Int, factorial, (, int, n, ), {, if, (, n, =, =, 0, ), return, 1, ;, else, return, n, *, factorial, (, n, -, 1, ), ;, }

ومن له باع او خبرة في هذا الموضوع فليدلني و أجره على الله

من فضلكم اخوتي الكرام .

#2

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

  1. هذه محاولة مني :
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    
    public class Split {
    	public static List<String> split(String s, String pattern) {
        	assert s != null;
        	assert pattern != null;
        	return split(s, Pattern.compile(pattern));
    	}
    
    	public static List<String> split(String s, Pattern pattern) {
        	assert s != null;
        	assert pattern != null;
        	Matcher m = pattern.matcher(s);
        	List<String> ret = new ArrayList<String>();
        	int start = 0;
        	while (m.find()) {
            	ret.add(s.substring(start, m.start()));
            	ret.add(m.group());
            	start = m.end();
        	}
        	ret.add(start >= s.length() ? "" : s.substring(start));
        	return ret;
    	}
    
    	private static void testSplit(String s, String pattern) {
        	System.out.printf("Splitting '%s' with pattern '%s'%n", s, pattern);
        	List<String> tokens = split(s, pattern);
        	System.out.printf("Found %d matches%n", tokens.size());
        	int i = 0;
        	for (String token : tokens) {
            	System.out.printf("  %d/%d: '%s'%n", ++i, tokens.size(), token);
        	}
        	System.out.println();
    	}
    
    	public static void main(String args[]) {
    
     		String text ="int factorial(int n) {" +
    "if (n == 0) return 1 ;"+
    "else return n * factorial(n-1) ;"+
    "}" ;
    
        	testSplit(text, "[{},()=;\\-\\+\\* ]");
    	}
    }

    حيث أطلب تقسيم النص حسب الأحرف الموضوعة بين القوسين [] و بما أن الــ - و الــ + و الــ * لها معنى خاص بالــ regular Expressions يوضع قبلها \\ كي يدل أنها حرف ..

  2. رابط المصدر : is-there-a-way-to-split-strings-with-string-split-and-include-the-delimiters
  3. الكود بلغة الجافا و بعد إضافة المشاركة , لاحظت ان الموضوع في قسم الــ C++ .. على كل حال , حاول الاستفادة منه

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 22 مارس 2012 في 11:43

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

شكرا اخي لكني لم استعمل الجاقا كثيرا , اريده بلغة السي بلس بلس

شكرا على انتباهك اخي :blush:

#4

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

لا شكر على واجب أخي ...

  1. حاول البحث عن مكتبة للــ regex .. و يمكنك استخدام الـــCPP.NET فهي تدعم الــ Regular Expression ..
  2. يمكن استخدام مكتبة الــ Boost لذلك :
    1. قم ببناء Boost خطوة بخطوة


    2. #include "stdafx.h"
      #include <string>
      #include <iostream>
      #include <iterator>
      #include <boost/regex.hpp>
      #include <boost/algorithm/string/regex.hpp>
      #include <vector>



      int _tmain(int argc, _TCHAR* argv[])
      {
      std::string expression = "int factorial(int n) {if (n == 0) return 1 ; else return n * factorial(n-1) ;};";
      boost::regex re("[{},()=;\\-\\+\\* ]");
      boost::sregex_iterator i(
      expression.begin (),
      expression.end (),
      re);
      boost::sregex_iterator j;
      size_t pos=0;
      for(; i!=j;++i) {
      std::string pre_delimiter = expression.substr(pos, (*i).position()-pos);
      std::cout << pre_delimiter << std::endl;
      std::cout << (*i) << std::endl;
      pos = (*i).position() + (*i).size();
      }
      std::string last_delimiter = expression.substr(pos);
      std::cout << last_delimiter << std::endl;

      return 0;
      }

    3. c-boost-split-string

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 22 مارس 2012 في 18:20

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

مواضيع مشابهة