调用 void 函数?
Calling a void function?
我正在尝试编写一个可以识别回文的程序。
我做了一个识别是否回文的函数,在main中成功使用了
但是,我还想删除任何空格、数字或特殊字符,因为它们可能会干扰将其识别为一个。
我试过在 main 中用 inputstring(isalphabet)
调用它,但它根本无法编译。还尝试将 isalphabet 更改为 char 而不是 void,并给它 return inputstring
但它不起作用。任何和所有建议表示赞赏
#include <stdio.h>
int isPalindrome(char inputString[]);
int main() {
char inputString[100];
int ret;
scanf("%s", inputString);
ret = isPalindrome(inputString);
printf("%d", ret);
}
int isPalindrome(char inputString[]) {
int count = 0;
int result;
while (inputString[count] != '[=10=]') {
count++;
}
char stcp[100];
int i = count, j = 0;
while (i != 0)
stcp[j++] = inputString[--i];
stcp[j] = 0;
if (strcmp(inputString, stcp) == 0) {
result = 1;
}
else {
result = 0;
}
return result;
}
void isalphabet(char inputString[], char nystring[]) {
int count, i, ny_i = 0;
count = strlen(inputString);
for (i = 0; i < count; i++) {
if (isalpha(inputString[i]) != 0) {
nystring[ny_i] = inputString[i];
ny_i++;
}
nystring[ny_i] = '[=10=]';
}
}
使用幻数100的辅助数组
char stcp[100];
是个坏主意。用户可以向函数传递任意长度的字符串,可以大于 100。
看来你需要的是下面这样的东西。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int isPalindrome( const char *s, int cmp( int ) )
{
int palindrome = 1;
const char *p = s + strlen( s );
while ( palindrome && s < p )
{
if ( !cmp( ( unsigned char )*s ) )
{
++s;
}
else if ( !cmp( ( unsigned char )*--p ) )
{
;
}
else
{
palindrome = *s++ == *p;
}
}
return palindrome;
}
int main(void)
{
printf( "%d\n", isPalindrome( "1a12b123c1234b12345a123456", isalpha ) );
printf( "%d\n", isPalindrome( "1a2bc3def2gh1i", isdigit ) );
return 0;
}
程序输出为
1
1
我正在尝试编写一个可以识别回文的程序。
我做了一个识别是否回文的函数,在main中成功使用了
但是,我还想删除任何空格、数字或特殊字符,因为它们可能会干扰将其识别为一个。
我试过在 main 中用 inputstring(isalphabet)
调用它,但它根本无法编译。还尝试将 isalphabet 更改为 char 而不是 void,并给它 return inputstring
但它不起作用。任何和所有建议表示赞赏
#include <stdio.h>
int isPalindrome(char inputString[]);
int main() {
char inputString[100];
int ret;
scanf("%s", inputString);
ret = isPalindrome(inputString);
printf("%d", ret);
}
int isPalindrome(char inputString[]) {
int count = 0;
int result;
while (inputString[count] != '[=10=]') {
count++;
}
char stcp[100];
int i = count, j = 0;
while (i != 0)
stcp[j++] = inputString[--i];
stcp[j] = 0;
if (strcmp(inputString, stcp) == 0) {
result = 1;
}
else {
result = 0;
}
return result;
}
void isalphabet(char inputString[], char nystring[]) {
int count, i, ny_i = 0;
count = strlen(inputString);
for (i = 0; i < count; i++) {
if (isalpha(inputString[i]) != 0) {
nystring[ny_i] = inputString[i];
ny_i++;
}
nystring[ny_i] = '[=10=]';
}
}
使用幻数100的辅助数组
char stcp[100];
是个坏主意。用户可以向函数传递任意长度的字符串,可以大于 100。
看来你需要的是下面这样的东西。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int isPalindrome( const char *s, int cmp( int ) )
{
int palindrome = 1;
const char *p = s + strlen( s );
while ( palindrome && s < p )
{
if ( !cmp( ( unsigned char )*s ) )
{
++s;
}
else if ( !cmp( ( unsigned char )*--p ) )
{
;
}
else
{
palindrome = *s++ == *p;
}
}
return palindrome;
}
int main(void)
{
printf( "%d\n", isPalindrome( "1a12b123c1234b12345a123456", isalpha ) );
printf( "%d\n", isPalindrome( "1a2bc3def2gh1i", isdigit ) );
return 0;
}
程序输出为
1
1