Bài toán về xâu trong c++

Nhập xâu kí tự W, gọi độ dài của W là n. Tạo ra xâu S bằng cách ghép liên tiếp 3 xâu W. Hãy chia S thành n chuỗi con độ dài 3 kí tự. Hãy in ra các xâu con đó, mỗi xâu con trên một dòng.
Ví dụ: W = “ABCD” thì S = “ABCDABCDABCD” và 4 chuỗi con sẽ là “ABC”, “DAB”, “CDA” và “BCD”.

Em không hiểu bài này nên viết ntn, có ai chỉ giáo giúp em với được k ạ. :((

Đây là cách giải cho bài toán của bạn theo cách mình hiểu. Bạn có thể dùng hàm substr(vitribatdau,dodai) để lấy chuỗi con của chuỗi lớn hơn.

#include "iostream"
#include "string"

using namespace std;

int main()
{
    string W,S;
    cout << "Nhap chuoi W: ";
    getline(cin,W);
    int n;
    n = W.length();
    cout << "Do dai cua chuoi W: " << n << endl; // tra ve do dai chuoi;
    for (int i=0; i<3; i++)
    {
        S = S + W;
    }
    cout << "S: " << S << endl; // Check chuoi S //substr
    for (int i=0; i<n; i++)
    {
        cout << "Chuoi con do dai 3 ky tu thu " << i+1 << ": "<< S.substr(i*3,3) << endl; // substr lay chuoi con
    }
    return 0;
}
2 Likes

Dạ em cảm ơn. Em đã hiểu rồi ạ. :sweat_smile:

Anh giải thích thêm cho em hiểu chỗ i*3 trong hàm substr đc k ạ

Nếu W = “AABB” thì kết quả là gì? :smiley:

2 Likes

Kết quả sẽ thế này

Nhap chuoi W: AABB
Do dai cua chuoi W: 4
S: AABBAABBAABB
Chuoi con do dai 3 ky tu thu 1: AAB
Chuoi con do dai 3 ky tu thu 2: BAA
Chuoi con do dai 3 ky tu thu 3: BBA
Chuoi con do dai 3 ky tu thu 4: ABB

1 Like

Tại vì trong hàm substr mình cần khai báo vị trí bắt đầu.

Nhưng do hàm for biến i chạy với các giá trị là 0,1,2,3,…

Như vậy vị trí bắt đầu sẽ lần lượt trong hàm substr sẽ lần lượt là 0(0 * 3), 3(1 * 3), 6(2 * 3), 9(3 * 3) (cách nhau 3 chữ).

3 Likes

xài <iostream> với <string> nha, "" là dành cho header file của project, <> là header file của thư viện :V

4 Likes

Cái này giờ mình mới biết, đó giờ toàn nghe là dùng " " hay < > cái nào cũng được :))

Vậy là :smiley:

var dostuff = s => {for(var i=1, tmp=0; i<=s.length; ++i) {
   console.log(`Chuỗi thứ ${i} là ${s[tmp++%s.length]}${s[tmp++%s.length]}${s[tmp++%s.length]}`)
}}

Tradeoff:

var dostuff = s => {
  var o = s.length;
  if(s.length % 3 != 0) s = [s, s[0], s[1]].join();
  for(var i=1, tmp=0; i<=s.length; ++i) {
    console.log(`Chuỗi thứ ${i} là ${s[tmp++]}${s[tmp++]}${s[tmp++]}`);
    if(tmp>=o) tmp-=o;
  }
}
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?