1

文字列を反転し、文字列が回文かどうかをチェックする関数を作成しています。「abba」のような明らかな回文で関数をテストすると、関数は回文ではないと言います。また正弦と逆弦では弦の長さも違います!

#include <stdio.h>
#include <string.h>

char forward [] = "abba"; //The string to be reversed

int size = (sizeof(forward)/sizeof(forward[0]) - 1);
int j = 0;
char reverse [10];

void reverser(char forward []) {

    printf("%s", "String forward: ");
    for (int i = 0; i < size; i++) { //Function for printing out the forward string.
        printf("%c", forward[i]);
    }

    printf("\n");

    printf("%s", "String reversed: ");

    for (int i = size, j = 0; i >= 0; --i, ++j) { //Function for reversing the string and printing it.
        reverse[j] = forward[i];
        printf("%c", reverse[j]);       
    }

    printf("\n");

    if (strcmp(forward, reverse) != 0) { //Using strcmp to check if the forward and reversed string are the same. 
        printf("Not a palindrome!\n");
    }
    else{
        printf("A palindrome!\n");
    }

    printf("Forward string length: %d\n",strlen(forward));
    printf("Reversed string length: %d\n",strlen(reverse));
} 

int main () {
    reverser(forward);      
}

出力:
文字列前方: abba
文字列反転: abba
回文ではありません!
順方向文字列長: 9
逆方向文字列長: 0

4

4 に答える 4

0

「反転」の最初の文字は「\0」だと思います。

int size = (sizeof(forward)/sizeof(forward[0]) - 1);この行を に置き換えますint size = strlen(forward)

さらに :

printf("%s", "String forward: "); for (int i = 0; i < size; i++) { //Function for printing out the forward string. printf("%c", forward[i]); }

で置き換えることができますprintf("String forward : %s\n", forward);

于 2015-12-04T16:41:55.620 に答える