回文の書き方
9374 ワード
文字列が文字列に戻るかどうかをテストします
次に、対応する場所の大文字と小文字にかかわらず、
次のように書くことができます.
ソース文字列内の句読点を無視して、文字列が入力されているかどうかをテストします.
1. bool is_palindrome(char *str, int size)
2. {
3. int tmp1 = size-2, tmp2 = (size-1)/2;
4. for (int i = 0; i < tmp2; ++i)
5. {
6. if (str[i] != str[tmp1-i])
7. return false;
8. }
9. return true;
10. }
次に、対応する場所の大文字と小文字にかかわらず、
次のように書くことができます.
# bool is_palindrome(char *str, int size)
# {
# int tmp1 = size-2, tmp2 = (size-1)/2;
# for (int i = 0; i < tmp2; ++i)
# {
# int char_dif = str[i]-str[tmp1-i];
# if (str[i] == str[tmp1-i] || abs(char_dif)==32)
# continue;
# return false;
# }
# return true;
# }
ソース文字列内の句読点を無視して、文字列が入力されているかどうかをテストします.
# #include
<
iostream
>
# #include
<
iostream
>
# #include
<
math.h
>
#
using
namespace
std;
#
#
#
struct
res
# {
#
char
*
s;
#
int
size;
# };
# res ignore_punctuate(
char
*
str,
int
size)
# {
#
int
tmp
=
size
-
2
;
#
char
*
str1
=
new
char
[size];
#
int
j
=
0
;
#
for
(
int
i
=
0
; i
<=
tmp;
++
i)
# {
#
if
(
!
ispunct(str[i]))
# {
# str1[j
++
]
=
str[i];
# }
# }
# str1[j]
=
'
\0
'
;
# res tmp1;
# tmp1.s
=
str1;
# tmp1.size
=
j
+
1
;
#
return
tmp1;
# }
#
bool
is_palindrome(
char
*
str,
int
size)
# {
#
int
tmp1
=
size
-
2
, tmp2
=
(size
-
1
)
/
2
;
#
for
(
int
i
=
0
; i
<
tmp2;
++
i)
# {
#
int
char_dif
=
str[i]
-
str[tmp1
-
i];
#
if
(str[i]
==
str[tmp1
-
i]
||
abs(char_dif)
==
32
)
#
continue
;
#
return
false
;
# }
#
return
true
;
# }
#
#
int
main()
# {
#
char
a[]
=
"
abb,A
"
;
#
int
size
=
sizeof
(a)
/
sizeof
(
*
a);
# res tmp
=
ignore_punctuate(a,size);
# cout
<<
is_palindrome(tmp.s, tmp.size)
<<
endl;
# }