Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

In Tất Cả Từ "Hài Hước" Trong Chuỗi Trong C++


Trong bài toán này, chúng ta được cho một câu. Nhiệm vụ là in tất cả các từ trong câu là từ hài hước (funny words).

Từ hài hước là từ thỏa mãn điều kiện: hiệu tuyệt đối giữa các ký tự kề nhau của chuỗi và chuỗi đảo ngược của nó bằng nhau.

|string[0] - string[1]| = |revstring[0] - revstring[1]|

Ví dụ để hiểu vấn đề:

Đầu vào: chuỗi = 'ABRS' → Đầu ra: Yes
Giải thích: Chuỗi đảo = SRBA
|A-B| = 1 = |S-R|
|B-R| = 16 = |R-B|
|B-A| = 1 = |R-S|

Để giải quyết, ta tách từng từ từ câu. In từ nếu là funny string.

Kiểm tra funny string – Duyệt chuỗi từ cả hai đầu: từ đầu và từ cuối. So sánh hiệu tuyệt đối giữa ký tự kề nhau, trả về false nếu hiệu không giống nhau.

Ví Dụ

Mã triển khai logic:

#include <iostream>
#include<string.h>
using namespace std;

bool isFunny(string word) {
    int i = 1;
    int j = word.length() - 2;
    for (int i = 0; i < word.length(); i++)
        word[i] = tolower(word[i]);
    while (i <= j) {
        if (abs(word[i] - word[i - 1]) != abs(word[j] - word[j + 1]))
            return false;
        i++;
        j--;
    }
    return true;
}

void printFunnyWords(string str) {
    str += " ";
    string word = "";
    for (int i = 0; i < str.length(); i++) {
        char ch = str[i];
        if (ch != ' ')
            word += ch;
        else {
            if (isFunny(word))
                cout << word << "\t";
            word = "";
        }
    }
}

int main() {
    string sentence = "hello, i love malayalam langauge";
    cout << "Tất cả từ hài hước của chuỗi '" << sentence << "' là:\n";
    printFunnyWords(sentence);
    return 0;
}

Đầu Ra

Tất cả từ hài hước của chuỗi 'hello, i love malayalam langauge' là: i malayalam