【c语言】复制所有的回文单词。将一行英文文本(含空格的字符串)中的所有回文单词存储到二维数组中,并返回所有回文单词的个数。

复制所有的回文单词。将一行英文文本(含空格的字符串)中的所有回文单词存储到二维数组中,并返回所有回文单词的个数。求解答


#include <iostream>
#include <cstring>

using namespace std;

bool isPalindrome(string word) {
    int length = word.length();
    for (int i = 0; i < length / 2; i++) {
        if (word[i] != word[length - i - 1]) {
            return false;
        }
    }
    return true;
}

int copyPalindromes(string line, string palindromes[][100]) {
    int count = 0;
    string word = "";
    int row = 0;
    int col = 0;
    for (int i = 0; i <= line.length(); i++) {
        if (line[i] == ' ' || i == line.length()) {
            if (isPalindrome(word)) {
                palindromes[row][col] = word;
                col++;
                count++;
            }
            word = "";
        } else {
            word += line[i];
        }
        if (i == line.length() - 1 && isPalindrome(word)) {
            palindromes[row][col] = word;
            count++;
        }
    }
    return count;
}

int main() {
    string line;
    cout << "Enter a line of text: ";
    getline(cin, line);
    string palindromes[100][100];
    int count = copyPalindromes(line, palindromes);
    cout << "Number of palindromes found: " << count << endl;
    cout << "Palindromes: " << endl;
    for (int i = 0; i < count; i++) {
        cout << palindromes[0][i] << endl;
    }
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 给你找了一篇非常好的博客,你可以看看是否有帮助,链接:回文猜想 C语言方法解决
  • 除此之外, 这篇博客: C语言回文串中的 对于单独的字符串,可用以上所述进行判断,对于需要连续判断的回文数,应该怎么做呢? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    例如:请输出1000~10000的回文数。

    • 想想要是把每一个数都进行字符数组存储,然后转置,在进行判断是否为回文数,那么这个算法的复杂度就超出我们想象了。
    • 于是我们提出了逆数处理(就是把这个数反向表达,如123 转换为321,其实也是逆置的思想)

    下面来看看具体如何做吧~~~~~


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^