01/10/2018, 15:21
Số lần lặp lại của xâu con trong xâu
Mọi người cho em hỏi bài này với ạ (nó gọi là lặp lại tandem). Em đã code xong đc phần kiểm tra xâu lặp vào số lần lặp liên tiếp của nó. Nhưng em bị mắc chỗ khai báo chiều dài của xâu và xử lý chỗ M dòng xâu con không biết làm thế nào. Mong mọi người giúp em với ạ.


#include<iostream>
#include<string>
using namespace std;
bool strcmpr(string str1, string str2){
int i, j, m, n;
m = str1.length();
n = str2.length();
for(i = 0; i < m;){
for(j = 0; j < n;)
{
if(str1[i] != str2[j])
return false;
else{
i ++;
j ++;
}
}
}
return true;
}
int tandem(int m, int n, string str){
m = m - 1;
n = n - m;
int count = 0;
string str1 = str.substr(m, n);
for(int i = m; i < str.length(); i += n){
string str2 = str.substr(i, n);
if(strcmpr(str1, str2) == 1)
count ++;
else
break;
}
cout << count;
}
int main(){
int b;
cin >> b;
string str;
getline(cin, str);
int i, j, m, n, x;
for(x = 0; x < b; x++){
cin >> m >> n;
tandem(m, n, str);
}
}
Bài liên quan
Đã dùng std::string thì không cần khai báo độ dài của xâu đâu.
Nhưng mà bài nó bắt khai báo ý ạ, kiểu mình phải nhập vào ý ạ, còn chỗ M xâu con anh có hướng gì không ạ
Bạn nhập n vào cho vui thôi, có lúc sẽ dùng đến.
m là số truy vấn (x, y) cần duyệt, phải giữ biến này.
khi xử lý chỗ vòng lặp m em bị lỗi này ạ
Hầy, truy cập ngoài mảng rồi, up code lên đi bạn.
code đây ạ
Đoạn này
Nếu bạn đã muốn tăng i, j cùng lúc thì chạy 1 chỉ số thôi. Với lại, nếu i đã vượt khỏi m mà j vẫn chưa vượt khỏi m thì sao? Code vẫn cứ chạy như thường.
Ý tưởng của em là chia cái xâu ban đầu thành những xâu con bằng nhau nên trong trường hợp này m = n ạ @. Với cả sửa lại thì vẫn bị lỗi như trên ạ
Hàm strcmpr của bạn dùng để làm gì? Bây giờ có thể thuật toán của bạn đang sai.