如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串 。 字母和数字都属于字母数字字符。 给你一个字符串s,如果它是回文串,输出yes;否则输出no。c++实现
时间: 2024-06-06 18:06:19 浏览: 185
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAX_LEN 100
int main()
{
char s[MAX_LEN + 1];
// 读入字符串
fgets(s, sizeof(s), stdin);
// 处理字符串,去除非字母数字字符和空格,转换成小写
int len = strlen(s);
int j = 0;
for (int i = 0; i < len; i++) {
if (isalnum(s[i])) {
s[j++] = tolower(s[i]);
}
}
s[j] = '\0'; // 加上字符串结束符
// 判断是否回文串
len = strlen(s);
int i = 0;
j = len - 1;
while (i < j) {
if (s[i] != s[j]) {
printf("no\n");
return 0;
}
i++;
j--;
}
printf("yes\n");
return 0;
}
相关问题
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,
你可以按照以下步骤判断给定的字符串 `s` 是否为回文串:
1. 首先,遍历字符串 `s` 的一半,同时从两端向中间对齐。对于每个索引 `i`,检查对应位置的字符 `s[i]` 和倒数第 `i+1` 个字符 `s[s.length - i - 1]` 是否都是字母数字字符(即是否为字母或数字)。
2. 将这两个字符都转换为小写字母,以便消除大小写的差异。例如,如果 `s[i]` 是大写字母 'A',那么 `s[i].toLowerCase()` 就会得到 'a'。
3. 比较处理后的字符是否相等。如果不等,则 `s` 不是回文串;如果所有对称的字符都匹配,说明 `s` 是回文串。
4. 执行完上述过程后,如果没有发现不匹配的字符,可以直接返回 true 表示是回文串;反之,返回 false。
如果你需要编写代码实现这个功能,可以使用如下的 Python 伪代码表示:
```python
def isPalindrome(s):
processed_s = ''
for i in range(len(s) // 2):
if s[i].isalnum():
processed_s += s[i].lower()
if s[-(i + 1)].isalnum():
processed_s += s[-(i + 1)].lower()
if processed_s[i] != processed_s[-(i + 1)]:
return False
if len(s) % 2 == 1 and s[len(s) // 2].isalnum(): # 处理奇数长度的情况
processed_s += s[len(s) // 2].lower()
return processed_s == processed_s[::-1]
```
c++如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串 。 字母和数字都属于字母数字字符。 给你一个字符串s,如果它是回文串,输出yes;否则输出no。
可以,这是一个技术问题,我可以回答。以下是判断字符串s是否回文的Python代码:
def is_palindrome(s):
s = "".join(c for c in s if c.isalnum()).lower()
return s == s[::-1]
s = "A man, a plan, a canal, Panama!"
if is_palindrome(s):
print("yes")
else:
print("no")
输出:yes
阅读全文