私はこれを何時間も解決しようとしてきました。研究を含みますが、行きません。基本的に、次の関数を作成する必要があります。
int reverseSentence(char** sentence, char ** newsentance, int maxWords){
文中の単語数を返す場所。
詳細は次のとおりです。
文の大文字化を維持する必要があります。つまり、文が大文字化されている場合は、大文字を保持します。名前などの単語が大文字になっている場合は、大文字を保持します
- パラメータsentenceは、反転する文を含む文字配列への参照であり、関数によって直接変更しないでください。各単語は文の配列エントリです。
- パラメータnewsentanceは、新しい文を保持するための文字配列への参照です。
- パラメータmaxWordsは、文字配列の最大サイズです。
- 文中の単語数を返す
- 文字列を一時ストレージにコピーして、文の中で置き換えないでください。ポインタを移動します。
例:「生きるべきか、そうでないか:それが問題です。」になります」質問は、あることです:すること、しないこと、すること。
今、私が抱えている問題は、現在私のコードが機能していることです。しかし、エラーを起こさずに何かを活用する方法を考えることはできないようです。(新しいストレージを作成できないため)。
私がここに持っているのは基本的に私のコードの一部です:
char ** fptr = sentence; //front sentence
char ** lptr = sentence; //last sentence
char ** nptr = newsentance;//front of new sentance
if( isupper(**fptr)){ //if the first letter of the first word is capital set flag
capflag = 1;
}
// find last word before null sentence and also calculate size
while(**(++lptr))
++size;
--lptr;
if(capflag){
*nptr = *lptr;
**nptr = toupper(**lptr); //error here
}
また、文の最後の「単語」が「」であると想定しなければなりませんでした。そうしないと、文のサイズを計算する方法が見つかりません。誰かが私を助けてくれることを願っています。
私はこれをテストに使用しました:
char ** test = malloc(1000);
*test = "To ";
*(test+1) = "be ";
*(test+2) = "or ";
*(test+3) = "not ";
*(test+4) = "to ";
*(test+5) = "be ";
*(test+6) = "";
char ** ztest = malloc(1000);
int rs = reverseSentence(test, ztest, 1000 );