⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spltest.cpp

📁 SPLASH is a c++ class library that implements many of the Perl constructs and data types, including
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    Regexp rexp("abc");
    SPString rst("12345Xabcxyzdef");
    cout << "rst.m(rexp) returns " << rst.m(rexp) << endl;
    
    cout << endl << "testing grep:" << endl;
    x.reset();
    x.push("abcd"); x.push("a2345"); x.push("X2345"); x.push("Xaaaaa"); x.push("aaaaa");
    
    y= x.grep("^a.*");
    cout << "x: " << endl << x << endl << "grep(^a.*)" << endl;
    cout << "Expect 3 matches:" << endl << y << endl;
    {
	SPString s1("abcdef");
        cout << "s1= " << s1 << ", s1.m(\"^cde\") : " << s1.m("^cde") << endl;
	cout << "s1= " << s1 << ", s1.m(\"^..cde\") : " << s1.m("^..cde") << endl;
    }
    {
    SPStringList sl;
    SPString str= "ab cd ef";
	sl = m("(..) (..)", str);
	cout << "sl = m(\"(..) (..)\", \"ab cd ef\"); sl = " << endl <<
		 sl << endl;
    }

    {
    Regexp ncr("abc", Regexp::nocase);
    Regexp cr("abc");
    SPString s= "ABC";
    cout << "s= " << s << ": s.m(ncr)= " << s.m(ncr) << endl;
    cout << "s= " << s << ": s.m(cr)= " << s.m(cr) << endl;
    cout << "s.m(\"abc\", \"i\")= " << s.m("abc", "i") << endl;
    cout << "s.m(\"abc\")= " << s.m("abc") << endl;
    }
    
// Test strings
    cout << "test string stuff:" << endl;

    SPString s1("string1"), s2, s3;
    const char *s= s1;

    cout << "Empty string: " << s2 << " length= " << s2.length()
	 << ",  strlen(s2) = " << strlen(s2) << endl;
    
    cout << "s1:" << s1 << endl;
    cout << "s[0]= " << s[0] << ", s[5]= " << s[5] << endl;
//    s[2]= 'X';
//    cout << "s[2]= 'X', s= " << s << endl;
//    s[2]= 'r';
    
    cout << "const char *s= s1: s= " << s << endl;
    s2= s1;
    cout << "s2=s1,  s2:" << s2 << endl;
    s1.chop();
    cout << "s1.chop()" << s1 << endl;
    s3= s;
    cout << "s3= s: s3 = " << s3 << endl;
    cout << "index(\"ri\") in " << s1 << ": " << s1.index("ri") << endl;
    s3= "1";
    cout << "index(" << s3 << ") in " << s1 << ": " << s1.index(s3) << endl;
    s3= "abcabcabc";
    cout << "rindex(abc) in" << s3 << ": " << s3.rindex("abc") << endl;
    cout << "rindex(abc, 5) in" << s3 << ": " << s3.rindex("abc", 5) << endl;

// test substrings
    cout << "substr(5, 3) in " << s3 << ": " << s3.substr(5, 3) << endl;
    s3.substr(5, 3)= "XXX";
    cout << "s3.substr(5, 3) = \"XXX\"" << s3 << endl;
    s3.substr(5, 3)= s1;
    cout << "s3.substr(5, 3) = s1" << s3 << endl;
    s3.substr(5, 3)= s1.substr(1, 3);
    cout << "s3.substr(5, 3) = s1.substr(1, 3)" << s3 << endl;
    s3.substr(0, 6)= s1.substr(0, 3);
    cout << "s3.substr(0, 6) = s1.substr(0, 3)" << s3 << endl;
    s3.substr(-3, 2)= s1.substr(0, 2);
    cout << "s3.substr(-3, 2) = s1.substr(0, 2)" << s3 << endl;

// test overlapping substrings
    s1= "1234567890";
    cout << "s1 = " << s1 << endl;
    s1.substr(0, 10)= s1.substr(1, 9);
    cout << "s1.substr(0, 10)= s1.substr(1, 9) " << s1 << endl;
    s1= "1234567890";
    cout << "s1 = " << s1 << endl;
    s1.substr(1, 9)= s1.substr(0, 10);
    cout << "s1.substr(1, 9)= s1.substr(0, 10) " << s1 << endl;

    // test over-large substrings
    s1= "1234567890"; s1.substr(7, 10)= "abcdefghij";
    cout << "s1.substr(7, 10)= \"abcdefghij\" " << s1 << endl;
    s1= "1234567890"; s1.substr(10, 5)= "abcdefghij";
    cout << "s1.substr(10, 5)= \"abcdefghij\" " << s1 << endl;
    s1= "1234567890"; s1.substr(20, 1)= "abcdefghij";
    cout << "s1.substr(20, 1)= \"abcdefghij\" " << s1 << endl;

    s1= "abcdef"; s2= "123456";
     
    cout << s1 << " + " << s2 << ": " << s1 + s2 << endl;
    cout << s1 << " + " << "\"hello\"= " << s1 + "hello" << endl;
    cout << "\"hello\"" << " + " << s1 << "= " << "hello" + s1 << endl;
    cout << s1 << " + \'x\' = " << s1 + 'x' << endl;
    
    s1= "abc"; s2= "def"; s3= "abc";
    cout << s1 << " == " << s2 << ": " << (s1 == s2) << endl; 
    cout << s1 << " != " << s2 << ": " << (s1 != s2) << endl;
    cout << s1 << " == " << s3 << ": " << (s1 == s3) << endl; 
    cout << s1 << " != " << s3 << ": " << (s1 != s3) << endl;
    cout << s1 << " < " << s2 << ": " << (s1 < s2) << endl; 
    cout << s1 << " > " << s2 << ": " << (s1 > s2) << endl; 
    cout << s1 << " <= " << s2 << ": " << (s1 <= s2) << endl; 
    cout << s1 << " >= " << s3 << ": " << (s1 >= s3) << endl; 

    cout << s1 << " == abc:" << (s1 == "abc") << endl; 
    cout << "abc == " << s1 << ("abc" == s1) << endl; 

    cout << s1 << " != abc:" << (s1 != "abc") << endl; 
    cout << "abc != " << s1 << ("abc" != s1) << endl; 

// Test the tr() functions
    s1= "abcdefghi";
    cout << "s1 = " << s1;
    cout << ", s1.tr(\"ceg\", \"123\") = " << s1.tr("ceg", "123");
    cout << ", s1 = " << s1 << endl;
    s1= "abcdefghi";
    cout << "s1.tr(\"a-z\", \"A-Z\") = " << s1.tr("a-z", "A-Z");
    cout << ", s1 = " << s1 << endl;
    s1= "abcdefghi";
    cout << "s1.tr(\"efg\", \"\") = " << s1.tr("efg", "");
    cout << ", s1 = " << s1 << endl;
    s1= "abcdefghi";
    cout << "s1.tr(\"ac-e\", \"X\") = " << s1.tr("ac-e", "X");
    cout << ", s1 = " << s1 << endl;
    s1= "abcdefghiiii";
    cout << "s1 = " << s1;
    cout << ", s1.tr(\"ac-e\", \"X\", \"s\") = " << s1.tr("ac-e", "X", "s");
    cout << ", s1 = " << s1 << endl;
    s1= "abcdefghi";
    cout << "s1.tr(\"ac-e\", \"\", \"d\") = " << s1.tr("ac-e", "", "d");
    cout << ", s1 = " << s1 << endl;
    s1= "abcdefghi";
    cout << "s1.tr(\"ac-e\", \"d\", \"d\") = " << s1.tr("ac-e", "d", "d");
    cout << ", s1 = " << s1 << endl;
    s1= "abcdefghi";
    cout << "s1.tr(\"ac-e\", \"\", \"cd\") = " << s1.tr("ac-e", "", "cd");
    cout << ", s1 = " << s1 << endl;
    s1= "bookkeeper";
    cout << s1;
    cout << ": s1.tr(\"a-zA-Z\", \"\", \"s\") = " << s1.tr("a-zA-Z", "", "s");
    cout << ", s1 = " << s1 << endl;
    s1= "abc123def456ghi";
    cout << s1;
    cout << ": s1.tr(\"a-zA-Z\", \" \", \"c\") = " << s1.tr("a-zA-Z", " ", "c");
    cout << ", s1 = " << s1 << endl;
    s1= "abc123def456ghi789aaa";
    cout << s1;
    cout << ": s1.tr(\"a-zA-Z\", \" \", \"cs\") = " << s1.tr("a-zA-Z", " ", "cs");
    cout << ", s1 = " << s1 << endl;
    s1= "abcdddaaaxxx";
    cout << s1;
    cout << ": s1.tr(\"a\", \"d\", \"s\") = " << s1.tr("a", "d", "s");
    cout << ", s1 = " << s1 << endl;
    
// Test substitute command
    s1= "abcdefghi";
    cout << s1;
    cout <<" s1.s(\"def\", \"FED\") = " << s1.s("def", "FED");
    cout << ", s1= " << s1 << endl;
    s1= "abcDEFghi";
    cout << s1;
    cout <<" s1.s(\"def\", \"FED\") = " << s1.s("def", "FED");
    cout << ", s1= " << s1 << endl;
    s1= "abcDEFghi";
    cout << s1;
    cout <<" s1.s(\"def\", \"FED\", \"i\") = " << s1.s("def", "FED", "i");
    cout << ", s1= " << s1 << endl;
    s1= "abcdefghi";
    cout << s1;
    cout <<" s1.s(\"(...)(...)\", \"\\$,$&,$2 $1\") = " <<
	     s1.s("(...)(...)", "\\$,$&,$2 $1");
    cout << ", s1= " << s1 << endl;
    s1= "abcdefabcghiabc";
    cout << s1;
    cout <<" s1.s(\"abc\", \"XabcX\", \"g\") = " << s1.s("abc", "XabcX", "g");
    cout << ", s1= " << s1 << endl;
    s1= "abcdefabcghiabc";
    cout << s1;
    cout <<" s1.s(\"abc\", \"X\", \"g\") = " << s1.s("abc", "X", "g");
    cout << ", s1= " << s1 << endl;
    s1= "abcdefabcghiabc";
    cout << s1;
    cout <<" s1.s(\"abc(.)\", \"X$1abcX$1\", \"g\") = " <<
	     s1.s("abc(.)", "X$1abcX$1", "g");
    cout << ", s1= " << s1 << endl;
    s1= "abcdefabcghiabc";
    cout << s1;
    cout <<" s1.s(\"(.)abc\", \"$1X$1abcX\", \"g\") = " <<
	     s1.s("(.)abc", "$1X$1abcX", "g");
    cout << ", s1= " << s1 << endl;
    s1= "1234567890";
    cout << s1;
    cout <<" s1.s(\"(.)(.)\", \"$2$1\", \"g\") = " <<
	     s1.s("(.)(.)", "$2$1", "g");
    cout << ", s1= " << s1 << endl;

}

#ifdef __GNUC__
template ostream& operator<<(ostream &, SPList<int> const &);
template ostream& operator<<(ostream &, SPList<SPString> const &);

template class SPList<int>;
template class SPList<SPString>;
template class SPList<Range>;
template class SPListBase<int>;
template class SPListBase<SPString>;
template class SPListBase<Range>;
template class SubList<int>;
template class SubList<SPString>;
template class SubList<Range>;
#endif
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -