输入一个英文单词,判断该单词是否是回文,要求用字符数组实现

本文介绍了一种用字符数组判断英文单词是否为回文的算法。通过从单词的左右两端同时比较字符,如果所有对应位置的字符都相等,则认定为回文。给出的C语言源程序中,用户输入单词后,程序会进行判断并输出结果。
摘要由CSDN通过智能技术生成

输入一个英文单词,判断该单词是否是回文,要求用字符数组实现

算法设计:

1.分别从左右两端开始,比较对应的字符是否相等

2.若对应的字符相等,则继续比较下一对字符;否则,退出循环

3.若所有对应的字符均相等,则是回文;否则,不是回文

源程序:

#include<stdio.h>

#include<string.h>

main()

{

       char a[100];

      int i,j;

       puts("Please input a word:");           //  起到提示作用,使程序更

### 回答1: // 这是一个基于字符串的动态规划法判断单词是否回文的C代码:#include <string.h> #include <stdio.h> // 为了避免重复计算,定义了一个二维数组,用来存储子问题的解 int dp[1000][1000]; // 判断字符串是否回文 int isPalindrome(char str[], int i, int j) { // 如果 i = j,说明只有一个字符,肯定是回文 if (i == j) return 1; // 如果 str[i] != str[j],说明不是回文 if (str[i] != str[j]) return 0; // 如果相等,但是 i >= j,说明只有两个字符,肯定是回文 if (i >= j) return 1; // 如果 dp[i][j] != -1,说明子问题已经解决,直接返回结果 if (dp[i][j] != -1) return dp[i][j]; // 如果 str[i] == str[j],说明可能是回文,递归求解 if (str[i] == str[j]) dp[i][j] = isPalindrome(str, i+1, j-1); return dp[i][j]; } // 主函数 int main() { // 初始化 dp 数组 memset(dp, -1, sizeof(dp)); char str[] = "abababa"; if (isPalindrome(str, 0, strlen(str)-1)) printf("字符串是回文"); else printf("字符串不是回文"); return 0; } ### 回答2: 下面是一个基于字符串的动态规划法判断单词是否回文的C代码: ```c #include <stdio.h> #include <stdbool.h> #include <string.h> bool isPalindrome(char* word) { int len = strlen(word); bool dp[len][len]; // 初始化dp数组 for (int i = 0; i < len; i++) { for (int j = 0; j < len; j++) { dp[i][j] = false; } } // 单个字符必定是回文 for (int i = 0; i < len; i++) { dp[i][i] = true; } // 动态规划过程 for (int k = 2; k <= len; k++) { for (int i = 0; i < len - k + 1; i++) { int j = i + k - 1; if (word[i] == word[j]) { if (k == 2 || dp[i+1][j-1]) { dp[i][j] = true; } } } } // 判断整个单词是否是回文 return dp[0][len-1]; } int main() { char word[] = "level"; if (isPalindrome(word)) { printf("该单词回文。\n"); } else { printf("该单词不是回文。\n"); } return 0; } ``` 以上的代码使用了动态规划的思想来判断一个单词是否是回文。首先创建一个二维数组`dp`,表示当前子字符串[i...j]是否是回文。初始化对角线上的元素为`true`,表示单个字符必定是回文。然后通过循环遍历整个字符串,不断更新`dp`数组。最终判断`dp[0][len-1]`是否是`true`,即可判断整个单词是否是回文。以上代码输出为:"该单词回文"。 ### 回答3: 以下是基于字符串的动态规划法判断单词是否回文的C代码: ```c #include <stdio.h> #include <stdbool.h> #include <string.h> bool isPalindrome(char *word) { int len = strlen(word); // 创建一个二维数组dp来保存计算结果 bool dp[len][len]; // 单个字符是回文 for (int i = 0; i < len; i++) { dp[i][i] = true; } // 判断相邻字符是否回文 for (int i = 0; i < len - 1; i++) { dp[i][i + 1] = (word[i] == word[i + 1]); } // 判断长度大于2的子串是否回文 for (int l = 3; l <= len; l++) { for (int i = 0; i <= len - l; i++) { int j = i + l - 1; dp[i][j] = (word[i] == word[j]) && dp[i + 1][j - 1]; } } // 返回首尾字符是否相等即为是否回文 return dp[0][len - 1]; } int main() { char word[100]; printf("请输入一个单词:"); scanf("%s", word); if (isPalindrome(word)) { printf("%s 是回文。\n", word); } else { printf("%s 不是回文。\n", word); } return 0; } ``` 这段代码首先定义函数`isPalindrome()`,它接受一个字符串作为参数,并返回布尔值来表示该字符串是否回文。函数内部使用动态规划的思想,通过二维数组`dp`来保存计算结果。在三个循环中,首先判断单个字符是否回文,然后判断相邻字符是否回文,最后判断长度大于2的子串是否回文。最后,通过返回二维数组的首尾字符是否相等来判断整个字符串是否回文。 在`main()`函数中,先读入一个单词,并调用`isPalindrome()`函数来判断单词是否回文,然后根据判断结果输出相应的提示信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值