0

私の仕事は2つの部分で構成されています。まず、100要素のglobbal char配列を作成し、cinを使用してそれにテキストを挿入する必要があります。その後、文字数を計算し、入力したテキストの長さで専用の配列を作成します。私は次の解決策を考えていました:

char[100]inputData;

int main()
{  

   cin >> inputData >> endl;

   int length=0;
   for(int i=0; i<100; i++)
   {
           while(inputData[i] == "\0")
           {
               ++count;
           }
   }
char c = new char[count];

私はよく考えていますか?

タスクの2番目の部分は、最初のプログラムで、挿入されたすべての単語への動的に作成されたポインターの配列を導入することです。新しい単語を追加すると、前のすべての単語が出力され、次の単語用のスペースがない場合は、inputData配列のサイズを2倍にする必要があります。そして正直に言うと、これは私には少し多すぎます。具体的に単語へのポインタを作成するにはどうすればよいですか?また、コンテンツを失うことなくグローバル配列のサイズを増やすにはどうすればよいですか?一時的な配列で?

4

3 に答える 3

2

あなたの質問の残りの部分に関係なく、あなたはwhileループについていくつかの間違った考えを持っているように見えます。このコードを見てみましょう。

for(int i=0; i<100; i++) {
    while(inputData[i] == "\0") {
        ++count;
    }
}

まず、"\0"ヌル文字ではありません。これは、終了NULバイトのみを含む文字列へのポインタです。'\0'代わりに必要です。この変更を想定すると、まだ問題があります。何が起こるかを見ていきましょう:

  • whileループはどのように機能しますか?条件が真である限り、本体を繰り返し実行します。
  • whileループはいつ終了しますか?本体を実行して最終的に条件が偽になったとき。
  • ループの状態はどうですか? inputData[i] == '\0'、修正後。
  • 体は何ですか? ++count
  • ++count条件の値を変更することはできますか?いいえ、変わらないのでi
  • したがって、inputData[i]がNULバイトでない場合、whileループは実行されません。
  • ただし、inputData[i]がNULバイトの場合、whileループは永久に実行されます。
  • 適切な文字列をに読み込んだとするとinputData、ある時点inputData[i]でNULになり、無限ループになります。

標準のC文字列の長さを数えるには、これを実行します

count = strlen(inputData);

何らかの理由で本当にループを作成する必要がある場合は、次のように機能します。

int len = 0, 
while (inputData[len] != '\0') {
    len++;
}

ループの後、len文字列の長さを保持します。

于 2010-04-26T22:36:10.230 に答える
1
#include <iostream>
#include <string>

int main()
{
    std::string input;
    std::getline(std::cin, input);
}
于 2010-04-26T22:15:31.683 に答える
0

グローバル配列は、配列へのポインターでない限り、サイズを動的に変更することはできません。その場合、グローバル配列を消去して再割り当てできます。

おそらく、あなたが求めているのは、std::vectorのような自動的にサイズ変更された配列です。ベクトルでsize()を呼び出すと、配列に含まれる文字数を確認できます。また、resize()を呼び出すと、配列のサイズを大きくすることができます。

最も洗練されたソリューションではありませんが、現時点では少し使いやすいかもしれません。

于 2010-04-26T22:05:02.343 に答える