Tôi đang cố gắng thay đổi đầu vào của người dùng ở dạng ký tự đại diện ("*word*")
thành định dạng biểu thức chính quy. Cuối cùng, tôi đang sử dụng mã dưới đây để lột các '*'
vào đầu và kết thúc của các đầu vào để tôi có thể thêm các ký tự biểu hiện thường xuyên trên hai đầu:std :: chuỗi xóa ký tự cuối cùng không thành công?
string::iterator iter_begin = expressionBuilder.begin();
string::iterator iter_end = expressionBuilder.end();
iter_end--;
if ((char)*iter_begin == '*' && (char)*iter_end == '*')
{
expressionBuilder.erase(iter_begin);
expressionBuilder.erase(iter_end);
expressionBuilder = "\\b\\w*" + expressionBuilder + "\\w*\\b";
}
Tuy nhiên, các cuộc gọi đến "expressionBuilder.erase(iter_end)"
không không xóa dấu sau '*'
khỏi chuỗi đầu vào để tôi bắt đầu với cụm từ thông dụng không chính xác. Tôi làm gì sai ở đây? "(char)*iter_end == '*'"
phải đúng với mã bên trong nếu statment để chạy (mà nó làm), vậy tại sao không cùng một iterator làm việc khi được chuyển tới xóa()?
May mắn với chuỗi bạn không cần phải sử dụng lặp, hầu hết các chức năng có một hình thức mà phải mất một chỉ số để thay thế. Tuy nhiên, như bạn nói, ngay cả với xóa chỉ mục nó vẫn nên được thực hiện "trở lại phía trước". –
P4tXrx5jrMlbhyludk9pxHBT30kGHo9n: bạn đúng về kết thúc(), nhưng có một iter_end-- trong đó nhìn vào ký tự cuối cùng thực tế của chuỗi. –
Điều này có ý nghĩa hoàn hảo và việc đảo ngược thứ tự đã giải quyết được vấn đề. Cảm ơn! – jeffm