2011-11-13 55 views
-4

任何人都可以幫助我重寫我只使用點和指針增量/減量寫下面的函數嗎?我沒有太多的指針經驗,所以我不知道該怎麼做。只使用指針增加/減少重寫函數

void reverse(char * s) 
{ 
    int i, l = strlen(s); 
    char c; 
    for(i = 0; i < (l >> 1); i++) 
    { 
     c = s[i]; 
     s[i] = s[l - i - 1]; 
     s[l - i - 1] = c; 
    } 
} 

不使用指針算術或數組表示法。 任何幫助或提示如何重寫上述功能appriciated。 這不是一個家庭作業問題,這是來自Big C++書籍的高級指針程序之一。 謝謝!

+0

這是功課嗎? – ibid

+6

如何在不使用指針運算的情況下使用指針遞增/遞減? – Mankarse

+0

嗯,指針增量和減量是指針算術的形式。請明確一下,具體來說,你做什麼,不想做什麼。另外,這是一個功課問題?如果不是,爲什麼只有指針遞增和遞減? –

回答

4
void reverse(char* s) 
{ 
    char* end(s); 
    while (*end) ++end; 
    std::reverse(s, end); 
} 
1

只使用指針的遞增和遞減會是這樣的,它可以變得更緊湊,但它變得越來越可讀的,因爲它是某些人可能有麻煩掃視這一點,並理解它。該while可以是for喜歡你,但這是更pointer'y

在GCC 4.5.1測試:

void rev(char* s) 
{ 
    char c; 
    char* e = s; 
    while(*e) e++; 
    e--; 
    while(s < e) 
    { 
     c = *s; 
     *s = *e; 
     *e = c; 
     e--; 
     s++; 
    } 
} 

但是,如果您使用C++,你應該用std::string ...

+0

當你設置char * e = s?指針指向數組的第一個元素還是整個數組? –

+0

@RichardNguyen:指針指向數組的第一個元素。數組的第一個元素位於數組的開始位置,所以指針*也指向整個數組的開始位置。 – Mankarse