Hỏi ý nghĩa của kí tự @ trong c# và đoạn code dưới đây

mấy cái chỗ

sBuffer = Regex.Replace(sBuffer, @"(?<number>\d+(\.\d+)?)", " ${number} ");

sBuffer = Regex.Replace(sBuffer, @"(?<ops>[+\-*/^()])", " ${ops} ");

mình k hiểu sao lại viết đc như vậy

public void Parse(string Expression)
        {
            output = new Queue();
            ops = new Stack();

            sOriginalExpression = Expression;   

            string sBuffer = Expression.ToLower();
            // captures numbers. Anything like 11 or 22.34 is captured
            sBuffer = Regex.Replace(sBuffer, @"(?<number>\d+(\.\d+)?)", " ${number} ");
            // captures these symbols: + - * / ^ ( )
            sBuffer = Regex.Replace(sBuffer, @"(?<ops>[+\-*/^()])", " ${ops} ");
            // captures alphabets. Currently captures the two math constants PI and E,
            // and the 3 basic trigonometry functions, sine, cosine and tangent
            sBuffer = Regex.Replace(sBuffer, "(?<alpha>(pi|e|sin|cos|tan))", " ${alpha} ");
            // trims up consecutive spaces and replace it with just one space
            sBuffer = Regex.Replace(sBuffer, @"\s+", " ").Trim();

cái này mình cũng ko biết , hóng các pro thôi … :smile: . mà bạn dùng cách này để trình bày code lên đây cho dễ nhìn nè , chứ để thế khó nhìn lắm … :stuck_out_tongue:

4 Likes

Bạn chạy 2 câu lệnh này sẽ thấy rõ .

    string a = "a\tb";
    string b = @"a\tb";
    Console.WriteLine(a);
    Console.WriteLine(b);

Trong c#, khi xuất ra ta có các ký tự như ‘\n’ là xuống dòng… nhưng khi cho @ đứng trước chuỗi thì \n lại mang giá trị là 1 chuỗi \n
@ : đánh dấu 1 chuỗi sau nó là y nguyên, viết sao xuất ra vậy. (Nhìn ví dụ trên dễ hiểu hơn, khó nói quá).
còn ý ngĩa các Regulare Expresion ở trên có giải thích bằng tiếng anh rồi đó bạn

3 Likes

@ trước một string để biết là giữ nguyên mẫu string đó giống như đã khai báo. Ví dụ 2 cách khai báo chuỗi không có @ và có @ đều in ra cùng 1 kết quả:

string x = "C:\\User\\Minh\\Code\\DayNhauHoc";
string x = @"C:\User\Minh\Code\DayNhauHoc";

// output x:
// C:\User\Minh\Code\DayNhauHoc

string y = "How are you?\nFine, thanks"; // ký tự \n nghĩa là xuống hàng
string y = @"How are you?
Fine, thanks";

// output y:
// How are you?
// Fine, thanks

string z = "My name is:\tBui Thai Minh"; // ký tự \t nghĩa là cách ra 1 tab
string z = @"My name is:   Bui Thai Minh";

// output z:
// My name is:   Bui Thai Minh
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?