1
char punct(char a[], int len) {
    for (int i = 0; i < len; i++) {
        if (ispunct(a[i]))
            { return i; }
        return -1;
    }
}

この関数が、渡した文字列ごとに -1 しか返さない理由を誰か教えてもらえますか? .txt ファイルから単語を取得し、それらを (少し変更して) 別の .txt ファイルに出力するプログラムを作成しています。文字列から句読点を削除する必要があります。ただし、 ispunct() 関数を使用して句読点がどこにあるかを検出できないようです。想像できる句読点のすべてのケースを使用して独自の関数を作成しましたが、それでも -1 しか返されません。ここの関数または私がそれに与えている文字列に問題がありますか? 私のコードをさらに表示する必要がある場合は、お知らせください。ありがとう!

4

1 に答える 1

7

これは、 if ispunct(a[0])returnsが呼び出されるためです。falsereturn -1

デフォルトの戻り値をループの外に移動する必要があります。

char punct(char a[], int len) {
    for (int i = 0; i < len; i++) {
        if (ispunct(a[i]))
            { return i; }
    }
    return -1;
}

この関数は、すべてのインデックスではなく、最初の句読点インデックスのみを返すことに注意してください。このケースを関数の外で扱っていると思います。

于 2012-04-17T19:00:02.697 に答える