用C++计算一个句子中的回文词

我们得到一个包含英语句子的字符串。目标是找到字符串中回文的单词数。回文词是那些从头或尾阅读时具有相同字母顺序的词。如果句子是“Madam speak good Malayalam”,则回文词的数量为 2。(Madam 和 Malayalam)

注意- 单词可以包含大写和小写字母。

让我们通过例子来理解。

输入- str = "我妈妈和安娜中午离开了";

输出- 句子中回文词的数量是 - 3

解释- 上面句子中的回文词是 - 妈妈,安娜和中午。(不考虑字母的大小写)

输入- str= “我在 Racecar 游戏中的第 121 级”

输出- 句子中回文词的数量是 - 4

解释- 上面句子中的回文词是 - I, level, 121, Racecar。(不考虑字母的大小写)

下面程序中使用的方法如下

我们将把句子中空格“”后的每个单词传递给一个函数。该函数将单词的字符转换为小写。现在从单词的第一个字符开始遍历,比较 word[0] 和 word[length-1],word[1] 和 word[length-2] 等等。如果发生任何不匹配,则中断循环否则返回 true。

  • 取一个包含句子的字符串数组 str[] 。

  • 函数check(string extra)接受一个字符串,如果字符串是回文则返回真,否则返回假。

  • 计算额外的字符串长度为 len= 。extra.lenght()

  • 使用 ( , , , ::tolower)将整个字符串转换为小写;extra.begin()extra.end()extra.begin()

  • 使用 for 循环从单词的索引 0 开始遍历直到 index<len。

  • 比较 extra[i]==extra[len-1]。如果发生不匹配,则返回 false。否则返回真。

  • 函数palindrome(string str, int length)接受一个句子及其长度,并返回其中的回文词数。

  • 取初始计数为 0。

  • 使用临时字符串 extra="" 来挑选和存储单个单词。

  • 使用 for 循环从索引 0 开始遍历句子,直到 i<length。

  • 取临时字符 temp= 。str.ar(i)

  • 如果 temp 不是空格,请将其添加到 extra 中以构成一个单词。

  • 如果 temp 不是空格,则 if ( check(extra)) 返回 true 增量计数。

  • 再次制作 extra=""。

  • 最后一次计数将包含回文单词的总数。

  • 返回计数作为结果。

示例

#include <bits/stdc++.h>
using namespace std;
bool check(string extra){
   int len = extra.length();
   transform(extra.begin(), extra.end(), extra.begin(), ::tolower);
   for (int i = 0; i < len; i++,len--){
      if (extra.at(i) != extra.at(len - 1)){
         return false;
      }
   }
   return true;
}
int palindrome(string str, int length){
   int count = 0;
   string extra = "";
   for (int i = 0; i < length; i++){
      char temp = str.at(i);
      if (temp != ' '){
         extra = extra + temp;
      }
      else{
         if (check(extra))
            { count++; }
         extra = "";
      }
   }
   return count;
}
int main(){
   string str = "nitin wants nitin for his company named nitin after nitin";
   str = str + " ";
   int length = str.length();
   cout<<"一个句子中的回文词数为: "<<palindrome(str, length)<<endl;
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出 -

一个句子中的回文词数为: 4

猜你喜欢