2011-05-15 142 views
0
#include "usefunc.h" 
#define MY_SIZE 256 

int inpArr(char tmp[], int size) { 
    size = -1; 
    while(1) { 
     size++; 
     if((tmp[size] = getchar()) == '\n') break; 
    } 
    return size; 
} 

void revString(char tmp[], int size, char new[]) { 
    int i, j; 
    for (i = size, j = 0; i >= 0; i--, j++) new[j] = tmp[i]; 
} 

void copy_forw(char tmp[], int size, char new[], int offset) { 
    int i, j; 
    for (i = offset, j = 0; i <= size; i++, j++) new[j] = tmp[i]; 
} 

void copy_back(char tmp[], int size, char new[], int offset) { 
    int i, j; 
    for (i = size-offset, j = size; i > -1; i--, j--) new[j] = tmp[i]; 
} 

void cut(char tmp[], int size, char new[]) { 

} 

int main() { 
    char tmp[MY_SIZE] = {0x0}, rev[MY_SIZE] = {0x0}, new[MY_SIZE] = {0x0}, some[MY_SIZE-1]; 
    int size = inpArr(tmp, size); 
    revString(tmp, size, rev); 
    copy_forw(rev, size, new, 1); copy_back(tmp, size, some, 1); 
    printf("|%s|\n|%s|\n", some, new); 
    int is_palindrome = StringEqual(new, some); 
    printf("%d\n", is_palindrome); 
} 

StringEqual幾乎是一個函數,它只是比較一個字符的字符數組。
如果我輸入字符串yay它應該是迴文,但似乎不是。爲什麼是這樣?爲什麼字符串不相等?

+1

嘗試先調試它,給我們提供錯誤或可能的最小代碼。不要使用pastebin,也不要在標題中包含任何標籤。這就是標籤的用途。 – 2011-05-15 05:21:20

+0

沒有錯誤:只是輸出是意外的「綾」或什麼 – tekknolagi 2011-05-15 05:24:06

+0

@tekknolagi:所以你得到綾而不是耶? – 2011-05-15 05:25:04

回答

4

你的問題是與雲行:

if((tmp[size] = getchar()) == '\n') break; 

這條線將永遠字符分配用戶輸入到陣列中,甚至當用戶輸入\n字符,以表明他們完成提供輸入。因此,例如,當你輸入「耶」,然後換行,表明你做,你的陣列是這樣的:

{'y', 'a', 'y', '\n'} 

和陣列的反向是:

{'\n', 'y', 'a', 'y'} 

.. 。迴文檢查顯然會失敗。我建議修改你的代碼如下:在行

int inpArr(char tmp[], int size) { 
    size = -1; 
    while(1) { 
     size++; 
     if((tmp[size] = getchar()) == '\n') break; 
    } 
    tmp[size] = '\0'; //replace the newline with a null terminator 
    return size; 
} 

void revString(char tmp[], int size, char new[]) { 
    int i, j; 
    for (i = size - 1, j = 0; i >= 0; i--, j++) new[j] = tmp[i]; 
    new[size] = '\0'; //place a null terminator at the end of the reversed string 
} 
+0

阿加!剛剛準備好提交這個答案時,你的彈出。+1,併發揮。 – 2011-05-15 05:36:57

+0

嗯 - 它會發生什麼現在打印(說我輸入'yay'):'| yay |'和'| ya |'和'0' – tekknolagi 2011-05-15 05:42:19

+0

它不適用於我:(打印'aya'和' aya' and'0' – tekknolagi 2011-05-15 05:49:49

1

看:

if((tmp[size] = getchar()) == '\n') break; 

'\n'總是出現在字符串的結尾。那是你的問題。

相關問題