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

จำนวนคำที่มีตัวอักษรตัวที่ i คือ (i-1)-th, i-th หรือ (i+1)-ตัวอักษรของคำที่กำหนดใน C++


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

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

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

ให้เราเข้าใจด้วยตัวอย่าง

ป้อนข้อมูล − str[] =“TPP”

ผลผลิต − จำนวนคำที่มีตัวอักษรตัวที่ i คือ (i-1)-th, i-th หรือ (i+1)-ตัวอักษรของคำที่กำหนดคือ − 4

คำอธิบาย

Replacing T by T (i)th or 1st P (i+1)th = TPP, PPP
Replacing 1st P by T (i-1)th, P (i)th, or P(i+1)th = TTP, TPP, TPP
Replacing 2nd P by P(i-1)th or P(i)th = TPP, TPP
Unique combination of replacements: TPP, PPP, TTP, PTP

ป้อนข้อมูล − str =“aaa”

ผลผลิต − จำนวนคำที่มีตัวอักษรตัวที่ i คือ (i-1)-th, i-th หรือ (i+1)-ตัวอักษรของคำที่กำหนด ได้แก่ 1

คำอธิบาย

Replacing a by a (i)th or 2nd a (i+1)th = aaa, aaa
Replacing 2nd a by a (i-1)th, a (i)th, or a(i+1)th = aaa, aaa, aaa
Replacing 3rd a by a(i-1)th or a(i)th = aaa, aaa
Unique combination of replacements: aaa

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

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

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

  • ใช้สตริง str[] เป็นอาร์เรย์อักขระ

  • ฟังก์ชั่น total(char str[], int length) รับสตริงและส่งกลับจำนวนคำที่มีตัวอักษรตัวที่ i คือ (i-1)-th, i-th หรือ (i+1)-ตัวอักษรที่กำหนด คำใน str[].

  • นับเริ่มต้นเป็น 1 คำใน str[] เอง

  • หากมีตัวอักษรตัวเดียว ความยาวจะเป็น 1 ให้คืนค่า 1

  • ตรวจสอบอักษรตัวแรกที่ดัชนี 0 หากตรงกับตัวที่สอง str[0]==str[1] แล้วคูณด้วย 1

  • หากต่างกันให้คูณด้วย 2

  • ตอนนี้ข้ามจากอักษรตัวที่ 2 ถึงอักขระตัวสุดท้ายที่สองโดยใช้ for วนซ้ำจากดัชนี i=1 ถึง i

  • สำหรับแต่ละตัวอักษรที่ดัชนี i. ตรวจสอบว่า str[i] เหมือนกับ str[i-1] หรือ str[i+1] ถ้าใช่ ให้คูณด้วย 1

  • ถ้าสองตัวใดเหมือนกัน ให้คูณด้วย 2

  • อย่างอื่นคูณด้วย 3

  • สำหรับอักขระตัวสุดท้าย ให้ตรวจสอบว่า str[i-1]==str[i] ถ้าเป็นจริง คูณด้วย 1 หรือคูณด้วย 2

  • ในตอนท้ายเราจะนับคำดังกล่าวอย่างชัดเจน

  • ผลตอบแทนนับเป็นผลลัพธ์

ตัวอย่าง

#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