Hỏi cách dùng các thao tác cơ bản của string

Mọi người cho em hỏi rằng muốn dùng các thao tác cơ bản của mảng string _…VD: string s[ ]? Em có seach gg và youtube nhưng không ra, e cũng thử nhưng fail nên lên đây hỏi ạ

Nếu có bài tập/ngữ cảnh cụ thể thì dễ hiểu hơn.
Mảng chỉ đơn giản là 1 biến lưu được nhiều giá trị, gán và truy xuất hầu hết thông qua toán tử [].

Trong C++ thì có std::vector thường được dùng để thay thế cho mảng. Linh động hơn mảng. Nói cho bạn biết trước chứ không khuyến khích bạn sử dụng nó ngay.

1 Like


Dạ đây ạ,

Bài này em định dùng mảng string[ ] nhưng tới phần truy cập từng giá trị của 1 xâu thông qua chỉ số thì bị trục trặc, em lên gg seach và có test nhưng fail ạ.

Bài làm của bạn đâu? Sai đâu thì sẽ chỉ dẫn để sửa.

Mà đề bài và ví dụ có vấn đề.

2 Likes
// Online C++ compiler to run C++ program online
#include <bits/stdc++.h>
using namespace std;
int main() {
    // Write C++ code here
    int n; cin >> n;
    string s[n+5];
    for(int i=0; i<n; i++){
        cin.ignore(0); getline(cin,s[i]);
    }
    int idx = 0;
    float res = -1e6, sum = 0;
    for(int i=0; i<n; i++){
        for(int j=0; j<s[i].size(); j++){
            if(s[i][j]>='0'&&s[i][j]<='9'){
                sum+=float(s[i][j]-'0');
            }
        }
        if(sum > res){
            res = sum;
            idx = i;
        }
    }
    cout << s[idx];

    return 0;
}

Bài của em đây ạ, sr nãy em quên gửi test key còn thiếu ạ, không hiểu sao em nhập N = 3 mà nhập mới 2 xâu thì nó in ra rồi, mong anh giúp em ạ

sum = 0; phải viết trong vòng for i.
Với lại cin.ignore(0) là sai vì cin.ignore là “hoặc”, giờ ignore 0 chars tức là giữ y nguyên.

Có thể phân tích: lần đầu đọc n là đúng, tiếp theo đọc xâu rỗng, xâu 1, rồi xâu 2, vậy là 3 xâu.

1 Like

Không cần phải sử dụng mảng string đâu bạn, cứ string s; rồi tạo vòng lặp n lần, nhập xong thì xử lý luôn.

1 Like

Sao lại n+5?

Sao lại là -1e6 (-1000_000)?

Như @rogp10 đã đề cập, sum để tròn vòng lặp thứ nhất để cài lại giá trị về 0, tránh cộng dồn các giá trị của chuỗi trước đó.

istream::ignore có đến 2 tham số.
Tham số 1 là số kí tự bạn muốn bỏ qua, bạn để là 0 thì như không. Tham số 2 là kí tự khi gặp thì sẽ ngừng bỏ qua trường hợp nhiều người dùng là \n - kí tự xuống dòng.
Đọc tài liệu:
https://cplusplus.com/reference/istream/istream/ignore/

Còn vấn đề nhập 3 mà chỉ cho nhập 2 thì @rogp10 cũng đã giải thích. Do bạn nhập n, bộ đẹm vẫn còn kí tự \n, nó sẽ nhận luôn thành chuỗi đầu tiên, thế là bạn chỉ còn lại 2 chuỗi để nhập. Đúng là nên dùng cin.ignore, nhưng chỉ dùng 1 lần sau khi nhập n, và tất nhiên là cin.ignore(0) là sai hoàn toàn. Bạn có thể thay bằng getline(), ngon hơn.

Vậy là mình chỉ cần dùng cin.ignore() sai khi nhập n thôi phải k bạn?

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?