Xin giúp đỡ bài toán SMS

Các bạn giúp mình với mình đang code bài toán đếm số lần khi bấm tin nhắn từ bàn phím sms trên điện thoại , code của mình đây:

#include <bits/stdc++.h>
#include<iostream>
#include<string>
using namespace std;
string sKey[12] = {
    "", "abc", "def",
    "ghi", "jkl", "mno",
    "pqrs", "tuv", "wxyz",
    "", " ", ""
};

int main() {
    ios_base::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int T; cin >> T;

	
    for (int t = 0; t < T; t++) {
        
        string sLine;
        int res = 0;
        getline(cin,sLine);
//        cin >> sLine;
//		std::getline(std::cin, sLine);
        for (int i = 0; i < sLine.size(); i++) {
            int cur;
            for (int j = 0; j < 12 ; j++) {
                for (int k = 0; k < sKey[j].size(); k++) {
                    if (sLine[i] == sKey[j][k]) {
                        cur = k + 1;
                    }
                }
            }
            res += cur;
        }      
        cout << "Case #" << t + 1 <<": "<< res<< "\n";
    }
    return 0;
}

Nhưng đầu ra khi dùng hàm getline() trả về res luôn = 0 ở trường hợp Case 1 , nhưng khi mình dùng cin thì k bị. Mong các bạn giúp mình thanks all

Thủ thuật nè:
Trước khi vào vòng lặp đầu tiên (for t) thì gọi getline() 1 lần, chỉ gọi không vậy thôi.

string dum;
getline(cin, dum);
for(int t = 0; t < T...
4 Likes

bài toán của mình muốn in ra các test case ấy bạn, thì mới phải dùng getLine trong vòng lặp. Mình tìm ra nguyên nhân là phải dùng cin.ignore để xóa cache từ lệnh cin trước rồi nhưng các case sau đó sẽ sai mất 1 đơn vị :((

:disappointed_relieved:

Bạn có đọc chưa vậy?

4 Likes

à mình làm đc r thks bạn, mình đọc kỹ lại rồi :face_with_monocle: :face_with_monocle: :face_with_monocle:

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