编程序实现判断输入字符串(仅限26个小写字母)是否“回文”的功能。如果不是“回文”,请统计字符串中各个字符出现的频度。
/*
asdsa
"asdsa"是回文。
a : 2
d : 1
s : 2
Press any key to continue
*/
#include <stdio.h>#include <string.h>
int Isrev(char *s) {
int i,n = strlen(s);
for(i = 0;i < (n + 1)/2;i++)
if(s[i] != s[n - i - 1])
return 0;
return 1;
}
int main() {
int i,chs[26] = {0};
char s[1024];
gets(s);
if(Isrev(s)) printf("\"%s\"是回文。\n",s);
else printf("\"%s\"不是回文。\n",s);
for(i = 0; s[i]; ++i) {
if(s[i] >= 'a' && s[i] <= 'z')
++chs[s[i] - 'a'];
}
for(i = 0; i < 26; ++i)
if(chs[i]) printf("%c : %d\n",'a' + i,chs[i]);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-05-29
#include <stdio.h>
#include <string.h>
int foo(const char *s)
{
int i;
int l = strlen(s);
for (i = 0, l -= 1; i < l; i++, l--)
if (s[i] != s[l])
return 0;
return 1;
}
int main(void)
{
char s[128], a[26] = {0};
int i = 0;
gets(s);
if (foo(s)) {
puts("yes");
return 0;
}
puts("no");
for (i = 0; i < strlen(s); i++)
a[s[i] - 'a']++;
for (i = 0; i < 26; i++)
if (a[i])
printf("%c: %d\n", i + 'a', a[i]);
return 0;
}
#include <string.h>
int foo(const char *s)
{
int i;
int l = strlen(s);
for (i = 0, l -= 1; i < l; i++, l--)
if (s[i] != s[l])
return 0;
return 1;
}
int main(void)
{
char s[128], a[26] = {0};
int i = 0;
gets(s);
if (foo(s)) {
puts("yes");
return 0;
}
puts("no");
for (i = 0; i < strlen(s); i++)
a[s[i] - 'a']++;
for (i = 0; i < 26; i++)
if (a[i])
printf("%c: %d\n", i + 'a', a[i]);
return 0;
}