用C++统计句子中回文单词的个数
给定一个包含英文句子的字符串,目标是找到字符串中回文单词的数量。回文词是指从开头或结尾读都具有相同字母顺序的单词。如果句子是“Madam speaks good Malayalam”,那么回文单词的数量是2。(Madam 和 Malayalam)
注意 − 单词可以包含大写和小写字母。
让我们通过例子来理解。
输入 − str = "My Mom and Anna left at Noon";
输出 − 句子中回文单词的数量为 − 3
解释 − 上述句子中的回文单词为 − Mom、Anna 和 Noon。(字母的大小写无关紧要)
输入 − str= “I am at level 121 in Racecar game”
输出 − 句子中回文单词的数量为 − 4
解释 − 上述句子中的回文单词为 − I、level、121、Racecar。(字母的大小写无关紧要)
下面程序中使用的方法如下
我们将在句子中以空格“ ”为分隔符获取每个单词,并将其传递给一个函数。该函数将单词的字符转换为小写。现在从单词的第一个字符开始遍历,并将word[0]与word[length-1]、word[1]与word[length-2]等进行比较。如果出现任何不匹配,则中断循环,否则返回true。
使用包含句子的字符串数组 str[]。
函数 check(string extra) 获取一个字符串,如果字符串是回文则返回 true,否则返回 false。
计算字符串 extra 的长度为 len=extra.length()。
使用 (extra.begin(), extra.end(), extra.begin(), ::tolower); 将整个字符串转换为小写。
使用 for 循环从单词的索引 0 开始遍历到索引 < len。
比较 extra[i] == extra[len-1]。如果出现不匹配,则返回 false。否则返回 true。
函数 palindrome(string str, int length) 获取一个句子及其长度,并返回其中回文单词的数量。
将初始计数设置为 0。
使用临时字符串 extra="" 来选择和存储单个单词。
使用 for 循环从索引 0 开始遍历句子到 i < length。
获取临时字符 temp=str[i]。
如果 temp 不是空格,则将其添加到 extra 以构成一个单词。
如果 temp 不是空格,则如果 (check(extra)) 返回 true,则计数加 1。
再次将 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<<"Count of palindrome words in a sentence are: "<<palindrome(str, length)<<endl; return 0; }
输出
如果我们运行上述代码,它将生成以下输出:
Count of palindrome words in a sentence are: 4