3

私はPythonが初めてなので、Cで文字列関数をエミュレートするクラスを書いてみました:

class CString:

  def __init__(self,str):
        self.value=[]
        self.value.extend(list(str))

def strcpy(cstring1,cstring2):
      import copy
      cstring1=copy.copy(cstring2)

def puts(cstring1):
    print ''.join(cstring1.value)

しかし、strcpy は機能していないようです:

>>obj1=CString("Hello World")
>>obj2=CString("Hai World!")
>>puts(obj1)
Hello World!
>>puts(obj2)
Hai World!
>>strcpy(obj1,obj2)
>>puts(obj1)
Hello World!

copy.copy(cstring2) を間違って割り当てていますか?

4

2 に答える 2

5

この線

cstring1 = copy.copy(cstring2)

と呼ばれるローカル変数のみを変更し、と呼ばれる外部スコープの変数は変更cstring1しませobj1

詳細については、この他のスタックオーバーフローの質問をご覧ください。

于 2012-05-28T02:00:33.730 に答える
1

入力パラメーター cstring1 を変更することはできませんが、

def strcpy(cstring1,cstring2):
      import copy
      cstring1=copy.copy(cstring2)

目標を達成するためにできることは他にもあります。

まず、strcpy文字列クラスの一部を作成し、そのメンバー関数に独自のstr要素を更新させることができます。

次に、CStringset 関数と get 関数を提供できます。これらの関数は、ある文字列を別の文字列にコピーするために直接使用することも、文字列のコピーを実行するメンバー関数で使用することもできます。

Python は興味深い言語です。C や Perl のような通常の命令型言語のように見える多くの要素が含まれており、C のように見える多くのコードを作成できます。Python の純粋さに関しては、そうしないようにガイドされます。 C でプログラミングしているように Python で考えること。

strcpy のようなものを再作成することは、代わりに Python で問題を解決することによって最もよく達成できることをお勧めします。まず、1 つの文字列を別の文字列に置き換えるだけです。

幸運を。

于 2012-05-28T12:20:17.700 に答える