Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm số từ có chữ cái thứ i là (i-1) -th, i-th hoặc (i + 1) chữ cái thứ của từ đã cho trong C ++

Chúng tôi được cung cấp một chuỗi str [] làm đầu vào. Mục đích là đếm các từ trong str [] có cùng độ dài với str [] và có vị trí của các chữ cái sao cho chữ cái thứ i được thay thế bằng chữ cái ở vị trí (i1) hoặc (i) hoặc (i + 1).

Đối với chữ cái đầu tiên thay thế sẽ là từ vị trí i hoặc i + 1

Đối với chữ cái cuối cùng thay thế sẽ là từ vị trí i-1 hoặc i.

Hãy cho chúng tôi hiểu với các ví dụ.

Đầu vào - str [] =“TPP”

Đầu ra - Số lượng các từ có chữ cái thứ i là (i-1) -th, i-th hoặc (i + 1) chữ cái thứ của từ đã cho là - 4

Giải thích

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

Đầu vào - str =“aaa”

Đầu ra - Số lượng các từ có chữ cái thứ i là (i-1) -th, i-th hoặc (i + 1) chữ cái thứ của từ đã cho là:1

Giải thích

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

Cách tiếp cận được sử dụng trong chương trình dưới đây như sau

Chúng tôi biết rằng đối với mỗi bức thư, chúng tôi có ba khả năng. Nếu đối với ký tự i hiện tại, tất cả (i-1) th, ith, (i + 1) th khác nhau thì chúng ta có 3 lựa chọn. Nếu hai tùy chọn giống nhau, chúng ta có 2 tùy chọn, nếu tất cả đều giống nhau thì chỉ có một tùy chọn.

Vì vậy, chúng tôi sẽ duyệt qua chuỗi và kiểm tra tính duy nhất và nhân với 3, 2 hoặc 1 theo các chữ cái. Đối với chữ cái đầu tiên và chữ cái cuối cùng, chúng tôi sẽ kiểm tra tính duy nhất và nhân với 2 hoặc 1 theo cách tương tự.

  • Lấy chuỗi str [] dưới dạng một mảng ký tự.

  • Hàm Total (char str [], int length) lấy chuỗi và trả về số lượng các từ có ký tự thứ i là (i-1) -th, i-th, hoặc (i + 1) -th ký tự của từ trong str [].

  • Lấy số lượng ban đầu là 1. Chính từ trong str [].

  • Nếu có một chữ cái, độ dài sẽ là 1, trả về 1.

  • Kiểm tra ký tự đầu tiên ở chỉ mục 0. Nếu nó giống với ký tự thứ hai thì str [0] ==str [1] sau đó đếm đa số bằng 1

  • Nếu chúng khác nhau thì nhân số đếm với 2.

  • Bây giờ chuyển từ ký tự thứ 2 sang ký tự cuối cùng thứ hai bằng vòng lặp for từ chỉ mục i =1 đến i

  • Đối với mỗi chữ cái ở chỉ mục i. Kiểm tra xem str [i] có giống với str [i-1] hay str [i + 1] hay không. Nếu có, hãy nhân số đếm với 1.

  • Nếu hai bất kỳ giống nhau, nhân số đếm với 2.

  • Khác nhân số đếm với 3.

  • Đối với ký tự cuối cùng, hãy kiểm tra xem str [i-1] ==str [i]. Nếu đúng, nhân số đếm với 1. Khác nhân với 2

  • Cuối cùng, chúng ta sẽ có một số lượng các từ riêng biệt như vậy.

  • Kết quả là số lượt trả lại.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

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