Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับจำนวนคำที่ตัวอักษรตัวที่ i เป็นตัวอักษรตัวที่ i-1, i, หรือ i+1 ของคำที่กำหนดใน C++


เราได้รับสตริง str[] เป็นอินพุต เป้าหมายคือนับจำนวนคำจาก str[] ที่มีความยาวเท่ากับ str[] และมีตำแหน่งตัวอักษรที่ตัวอักษรตัวที่ i ถูกแทนที่ด้วยตัวอักษรที่ตำแหน่ง (i-1), i, หรือ (i+1)

สำหรับตัวอักษรแรก การแทนที่จะมาจากตำแหน่ง i หรือ i+1
สำหรับตัวอักษรสุดท้าย การแทนที่จะมาจากตำแหน่ง i-1 หรือ i

มาดูตัวอย่างเพื่อเข้าใจ

อินพุต − str[] = "TPP"

เอาต์พุต − จำนวนคำที่ตัวอักษรตัวที่ i เป็นตัวอักษรตัวที่ i-1, i, หรือ i+1 ของคำที่กำหนด คือ 4

คำอธิบาย

แทนที่ T ด้วย T (i) หรือ P ตัวแรก (i+1) = TPP, PPP
แทนที่ P ตัวแรก ด้วย T (i-1), P (i), หรือ P (i+1) = TTP, TPP, TPP
แทนที่ P ตัวที่สอง ด้วย P (i-1) หรือ P (i) = TPP, TPP
ชุดการแทนที่ที่ไม่ซ้ำกัน: TPP, PPP, TTP, PTP

อินพุต − str = "aaa"

เอาต์พุต − จำนวนคำที่ตัวอักษรตัวที่ i เป็นตัวอักษรตัวที่ i-1, i, หรือ i+1 ของคำที่กำหนด คือ 1

คำอธิบาย

แทนที่ a ด้วย a (i) หรือ a ตัวที่สอง (i+1) = aaa, aaa
แทนที่ a ตัวที่สอง ด้วย a (i-1), a (i), หรือ a (i+1) = aaa, aaa, aaa
แทนที่ a ตัวที่สาม ด้วย a (i-1) หรือ a (i) = aaa, aaa
ชุดการแทนที่ที่ไม่ซ้ำกัน: aaa

แนวทางที่ใช้ในโปรแกรม

เรารู้ว่าสำหรับตัวอักษรแต่ละตัวมี 3 ความเป็นไปได้ หากตัวอักษร (i-1), i, (i+1) ต่างกันทั้งหมด จะมี 3 ตัวเลือก หากมีสองตัวเหมือนกัน 2 ตัวเลือก หากทั้งสามตัวเหมือนกัน 1 ตัวเลือก

ดังนั้นเราจะเดินทางผ่านสตริงและตรวจสอบความไม่ซ้ำกัน แล้วคูณด้วย 3, 2, หรือ 1 ตามตัวอักษร สำหรับตัวอักษรแรกและสุดท้าย ตรวจสอบความไม่ซ้ำกันและคูณด้วย 2 หรือ 1 แบบเดียวกัน

  • รับสตริง str[] เป็นอาเรย์ตัวอักษร
  • ฟังก์ชัน total(char str[], int length) รับสตริงและคืนจำนวนคำที่ตรงตามเงื่อนไข
  • กำหนด count เริ่มต้นเป็น 1 (คำใน str[] เอง)
  • ถ้าความยาวเป็น 1 คืน 1
  • ตรวจสอบตัวอักษรแรกที่ดัชนี 0 ถ้าเท่ากับตัวที่สอง str[0]==str[1] คูณ count ด้วย 1 มิฉะนั้นคูณ 2
  • วนลูปจากตัวอักษรที่ 2 ถึงตัวก่อนสุดท้าย ดัชนี i=1 ถึง i<length-1
  • สำหรับตัวอักษรที่ดัชนี i ตรวจสอบว่า str[i] เท่ากับ str[i-1] หรือ str[i+1] ถ้าใช่ คูณ count ด้วย 1
  • ถ้ามีสองตัวเหมือนกัน คูณ count ด้วย 2
  • มิฉะนั้น คูณ count ด้วย 3
  • สำหรับตัวอักษรสุดท้าย ตรวจสอบ str[i-1]==str[i] ถ้าใช่ คูณ 1 มิฉะนั้น คูณ 2
  • คืนค่า count เป็นผลลัพธ์

ตัวอย่างโค้ด C++

#include<bits/stdc++.h>
using namespace std;

int total(char str[], int length){
    int count = 1;
    if (length == 1){
        return count;
    }
    if (str[0] == str[1]){
        count = count * 1;
    } else {
        count = count * 2;
    }
    for (int j=1; j<length-1; j++){
        if (str[j] == str[j-1] && str[j] == str[j+1]){
            count = count * 1;
        } else if (str[j] == str[j-1]){
            count = count * 2;
        } else if(str[j] == str[j+1]){
            count = count * 2;
        } else if(str[j-1] == str[j+1]){
            count = count * 2;
        } else {
            count = count * 3;
        }
    }
    if (str[length - 1] == str[length - 2]){
        count = count * 1;
    } else {
        count = count * 2;
    }
    return count;
}

int main(){
    char str[] = "TPP";
    int length = strlen(str);
    cout<<"Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: "<<total(str, length) << endl;
    return 0;
}

เอาต์พุต

หากรันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −

Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: 4