2016-02-26 36 views
-2

這是我爲使用遞歸反轉字符串而編寫的代碼。反向使用遞歸的字符串在C中工作,但在C++中不能使用

我已經在兩個方面嘗試過:

  • 一個使用C
  • 一個用C++

C版本按預期工作,但是,當我用C++版本沒有關係」給出任何輸出並連續讀取輸入。

void reverse() // C++ version 
{ 
    char ch; 
    cin>>ch; 
    if(ch!='\n')reverse(); 
    cout<<ch; 
} 
void reverse() // C version 
{ 
    char ch; 
    scanf("%c",&ch); 
    if(ch!='\n')reverse(); 
    printf("%c",ch); 
} 
int main(void) 
{ 
    reverse(); 

    return 0; 
} 

C++代碼有什麼問題?

+1

1.上面的代碼將無法編譯,因爲你定義了相同類型的兩個不同的功能。 2.你不清楚你的問題是什麼;嘗試更具體。 – blazs

+2

aree我一次沒有使用2個funcion:/我只是在這裏粘貼它詢問 – sat

+0

@pufi你使用scanf(「%c」,&ch);它讀取一個字符,那麼你如何嘗試反轉它,因爲它是隻有一個? – Marievi

回答

3

問題是cin>>ch不會讀取空白字符。相反,您可以使用cin.get

像:

std::cin.get (ch); 

由於@MohitJain說,你可以使用cin.read也。

+0

非常感謝你 – sat

+0

我不能: (我沒有足夠的聲望投票sry – sat

+0

done !!!!!!!!!!!!!!! – sat

1

在您的C++ reverse()中,使用cin.get(ch);而不是cin>>ch;,因爲後者不會讀取\n

-2

因爲你正在服用的只有一個字符,你可以試試這個:

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char str[100], temp; 
    int i, j = 0; 
    printf("\nEnter the string :"); 
    gets(str); 
    i = 0; 
    j = strlen(str) - 1; 
    while (i < j) { 
     temp = str[i]; 
     str[i] = str[j]; 
     str[j] = temp; 
     i++; 
     j--; 
    } 
    printf("\nReverse string is :%s", str); 
    return (0); 
} 
+0

是的,我知道這種做法。但我只是想知道以上兩個版本之間的區別!無論如何感謝您的幫助! – sat