2014-09-23 15 views
-2

我在Java中創建了這個程序,但我在C++中是相當新的,並且使用字符串是不可行的。我想知道是否有人能指出我的方向,以便將該程序「翻譯」爲C++。只是如何使用字符串,也許你在我的代碼中看到的值得一提的東西。注意:我並不是要求你們中的任何一位進行直接翻譯,只需要我提供信息,代碼僅供參考。在C++中使用字符串

import java.io.BufferedWriter; 
import java.io.OutputStreamWriter; 
import java.util.Scanner; 
public class DragonCurve{ 
    public static void main(String[] args){ 
     try{ 
     Scanner sc = new Scanner(System.in); 
     BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out)); 

     int n; 
     while((n = Integer.parseInt(sc.nextLine()))!=-1){ 
      log.write(dragon(n)+"\n"); 
     } 

     log.flush(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

public static String dragon(int n){ 

    if(n>2){ 
     String aux = dragon(n-1); 
     return aux+"L"+reverse(aux); 
    }else if(n==2) 
     return "LLR"; 
    else if(n==1) 
     return "L"; 
    else if(n==0) 
     return ""; 

    return ""; 
} 

public static String reverse(String aux){ 
    String ans = ""; 
    for(int i = aux.length();i>0;i--){ 
     if(aux.charAt(i-1)=='L') 
      ans+='R'; 
     else 
      ans+='L'; 
    } 

    return ans; 
} 
} 
+0

C++是與java不同的語言。代碼轉換不是微不足道的!你不能要求我們提供這種情況下的代碼plz_。試試自己的拳頭,並在遇到困難時詢問特定問題。 – 2014-09-23 04:49:44

+0

我相信[此頁上的示例](http://en.cppreference.com/w/cpp/string/basic_string/operator%2B)和[本頁](http://en.cppreference.com/w/) cpp/string/basic_string/operator_ltltgtgt)可以幫助你。如果您仍然不明白某些事情,請隨時提出具體問題。編譯示例程序,並增加你的東西應該幫助。 – 2014-09-23 04:50:02

+0

我其實並沒有要求你翻譯,而是告訴我去哪裏看,因爲我一直在試圖自己做,只是感到困惑。我發佈了代碼僅供參考。對不起,如果它看起來像我只是要求你爲我做。 @MohitJain謝謝,我會看看併發布我的代碼,如果我有任何問題。 – Darwin57721 2014-09-23 04:58:29

回答

2

爲了讓您入門,下面介紹如何編寫I/O。 (很多書都很糟糕)。

我離開了字符串處理部分,以供您弄清楚。它與Java沒有區別, 但是您必須記住std::string不包括任何自動將整數或字符轉換爲字符串的 函數;您不能只使用+運算符。要了解相關信息,請閱讀this thread

我會推薦從一本書學習。如果您沒有圖書,可以查看 cppreference.com或其他網站,瞭解std::string的工作原理。

請注意,std::reverse存在,您不必編寫自己的reverse函數。

#include <iostream> 
#include <string> 
#include <sstream> 

std::string dragon(int n) 
{ 
    // Exercise for the reader. 
} 

int main() 
{ 
    std::string s; 
    int n; 

    while (std::getline(std::cin, s)) 
    { 
     std::istringstream iss(s); 
     while (iss >> n) 
      std::cout << dragon(n) << std::endl; 
    } 
} 
+0

謝謝馬特!我會馬上嘗試一下。 :) – Darwin57721 2014-09-23 05:02:31

+0

好的。我應該提到的另一件事是,由於歷史原因,字符串文字的類型爲「char const []」。要得到一個std :: string,寫'std :: string(「abc」)',或者如果你的編譯器很新,''abc「s'。 – 2014-09-23 05:04:31

+0

哦,好的!再次感謝,我不認爲我的編譯器是最新的,所以我會用另一種方式。我希望在幾分鐘後發佈我的代碼。 – Darwin57721 2014-09-23 05:17:03