Abstract
回文是學習C語言時,常出現的作業與考題。
Introduction
所謂回文,就事字串的第一個字元等於最後一個字元,第二個字元等於倒數第二個字元。
palindrome.c / C
1 /*
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
3
4 Filename : palindrome.c
5 Compiler : Visual C++ 9.0 / Visual Studio 2008
6 Description : Demo how to test palindrome
7 Release : 10/27/2008 1.0
8 */
9
10 #include <stdio.h>
11 #include <string.h>
12
13 int is_palindrome(char *s) {
14 int i, len;
15
16 len = strlen(s);
17
18 for(i = 0; i < (len /2); i++) {
19 if (s[i] != s[len-i-1])
20 return 0;
21 }
22
23 if (i >= len/2)
24 return 1;
25 else
26 return 0;
27 }
28
29 int main() {
30 char s[256];
31
32 while(1) {
33 gets(s);
34
35 if (is_palindrome(s))
36 printf("%s is palindrome\n", s);
37 else
38 printf("%s is not palindrome\n", s);
39 }
40 }
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
3
4 Filename : palindrome.c
5 Compiler : Visual C++ 9.0 / Visual Studio 2008
6 Description : Demo how to test palindrome
7 Release : 10/27/2008 1.0
8 */
9
10 #include <stdio.h>
11 #include <string.h>
12
13 int is_palindrome(char *s) {
14 int i, len;
15
16 len = strlen(s);
17
18 for(i = 0; i < (len /2); i++) {
19 if (s[i] != s[len-i-1])
20 return 0;
21 }
22
23 if (i >= len/2)
24 return 1;
25 else
26 return 0;
27 }
28
29 int main() {
30 char s[256];
31
32 while(1) {
33 gets(s);
34
35 if (is_palindrome(s))
36 printf("%s is palindrome\n", s);
37 else
38 printf("%s is not palindrome\n", s);
39 }
40 }
18行
for(i = 0; i < (len /2); i++) {
if (s[i] != s[len-i-1])
return 0;
}
if (s[i] != s[len-i-1])
return 0;
}
依序檢查字串第一個字元是否等於最後一個字元,第二個字元是否等於倒數第二個字元,若發現任何一個字元不同,就不是回文。
感謝沐枫的提醒,在C++有更精簡的寫法。
palindrome.cpp / C++
1 /*
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
3
4 Filename : palindrome.cpp
5 Compiler : Visual C++ 9.0 / Visual Studio 2008
6 Description : Demo how to test palindrome
7 Release : 10/30/2008 1.0
8 */
9
10 #include <iostream>
11 #include <string>
12 #include <algorithm>
13
14 using namespace std;
15
16 int is_palindrome(string s) {
17 return equal(s.begin(), s.begin() + s.length() /2, s.rbegin());
18 }
19
20 int main() {
21 string s;
22
23 while(1) {
24 cin >> s;
25
26 if (is_palindrome(s))
27 cout << s << " is palindrome" << endl;
28 else
29 cout << s << " is not palindrome" << endl;
30 }
31 }
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
3
4 Filename : palindrome.cpp
5 Compiler : Visual C++ 9.0 / Visual Studio 2008
6 Description : Demo how to test palindrome
7 Release : 10/30/2008 1.0
8 */
9
10 #include <iostream>
11 #include <string>
12 #include <algorithm>
13
14 using namespace std;
15
16 int is_palindrome(string s) {
17 return equal(s.begin(), s.begin() + s.length() /2, s.rbegin());
18 }
19
20 int main() {
21 string s;
22
23 while(1) {
24 cin >> s;
25
26 if (is_palindrome(s))
27 cout << s << " is palindrome" << endl;
28 else
29 cout << s << " is not palindrome" << endl;
30 }
31 }
17行
return equal(s.begin(), s.begin() + s.length() /2, s.rbegin());
使用STL的equal()演算法,一行就可以判斷是不是回文了。
分类:
STL/Boost學習
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具