c语言非递归判断字符串是不是回文
时间: 2023-07-26 10:39:29 浏览: 116
下面是C语言的非递归实现判断字符串是否为回文的代码:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str[100];
int i, len, flag = 0;
printf("请输入一个字符串: ");
scanf("%s", str);
len = strlen(str);
for(i = 0; i < len/2; i++) {
if(str[i] != str[len-i-1]) {
flag = 1;
break;
}
}
if(flag == 1) {
printf("%s 不是回文字符串\n", str);
} else {
printf("%s 是回文字符串\n", str);
}
return 0;
}
```
这个程序首先读入一个字符串,然后计算字符串的长度。接着,使用一个循环来判断字符串是否是回文。在循环中,我们从字符串的两端开始比较字符,如果发现不相同的字符,则将 `flag` 标记为 `1`,表示这个字符串不是回文。如果循环结束后 `flag` 的值仍然是 `0`,则表示这个字符串是回文。
相关问题
字符串回文判断 C语言
在C语言中,字符串回文判断是指检查一个字符串是否从前往后读和从后往前读是一样的,也就是常说的“正读反读都一样”。这里我们可以采用两种常见方法:
1. **双指针法**:
使用两个指针,一个指向字符串的开始(`str[0]`),另一个指向结束(`str[strlen(str)-1]`)。然后逐次比较这两个指针所指的字符,如果相等则继续向中间移动,直到两个指针相遇或找到不相等的字符。若整个过程都未找到不相等的字符,则该字符串是回文。
```c
#include <stdio.h>
#include <string.h>
int isPalindrome(char str[]) {
int start = 0;
int end = strlen(str) - 1;
while (start < end) {
if (str[start] != str[end]) {
return 0; // 回文不是,直接返回非0值
}
start++;
end--;
}
return 1; // 所有字符都匹配,是回文
}
int main() {
char str[] = "madam";
if (isPalindrome(str)) {
printf("%s 是回文\n", str);
} else {
printf("%s 不是回文\n", str);
}
return 0;
}
```
2. **递归法**:
这种方法通过递归地检查字符串的第一个字符和最后一个字符,然后去掉首尾后再次检查,直到字符串长度小于等于1为止。
```c
#include <stdbool.h>
#include <string.h>
bool isPalindromeRec(char* str, int start, int end) {
if (start >= end) {
return true;
}
if (str[start] != str[end]) {
return false;
}
return isPalindromeRec(str, start + 1, end - 1);
}
// 主函数同上
```
c语言字符串逆序输出递归
要实现字符串逆序输出的递归方法,可以按照以下步骤进行:
1. 基本情况:如果字符串为空或者长度为1,则直接输出该字符串。
2. 递归情况:将字符串的第一个字符与剩余部分进行交换,并对剩余部分进行递归调用。
3. 递归结束后,将第一个字符与剩余部分重新交换,以保持原字符串的顺序。
下面是一个示例代码实现:
```c
#include <stdio.h>
#include <string.h>
void reverseString(char* str, int start, int end) {
if (start >= end) { // 基本情况
return;
}
// 交换第一个字符和最后一个字符
char temp = str[start];
str[start] = str[end];
str[end] = temp;
// 对剩余部分进行递归调用
reverseString(str, start + 1, end - 1);
}
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
int length = strlen(str);
reverseString(str, 0, length - 1);
printf("逆序输出的字符串:%s\n", str);
return 0;
}
```
请注意,以上代码将使用递归方法实现字符串逆序输出。下面是几个相关问题:
相关问题:
1. 如何使用非递归方法实现字符串逆序输出?
2. 如何判断一个字符串是否是回文字符串?
3. 如何统计一个字符串中出现的某个字符的个数?
阅读全文