Cの奇妙なアルゴリズム

JohnMerlino

私は本「TheCProgrammingLanguage」の演習の1つに従っていました:http//users.powernet.co.uk/eton/kandr2/krx116.html

以下のプログラムでは、たとえば、入力ファイルに行 'h \ n'が含まれている場合、getline関数はiとjを0に初期化します。'h 'はEOFまたは' \ n 'ではないため、ループ内のブロックは次のように実行されます。 jが0であるため、cはs配列ポインタの0インデックスに割り当てられます。次にjが1にインクリメントします。次にブロックが終了し、iカウンタが1にインクリメントします。ループは次の文字が '\ nかどうかをチェックします。 '、そしてそうなので、ブロックは終了します。この時点で、iとjは両方とも1に等しくなります。cは '\ n'に等しいため、jは1であるため、cはsポインタのインデックス1に挿入されます。次にjは2にインクリメントされます。次にiはインクリメントされます。次に、jが2であるため、ヌルターミネータ '\ 0'がsポインタのインデックス2に挿入されます。iも2であるため、関数は2を返します。

j変数のポイントがわかりませんそれが増加するとき、私もそうするからです。誰かが私が間違っていたと言った:

「異なるレートでインクリメントされるため。iカウンターは文字列の長さを追跡するために使用されます。j変数は、処理の最後に、ヌルターミネータが文字列内に入る必要があるポイントを格納します。 「」

ただし、iとjは同じ値であるため(一方は次々にインクリメントされる)、上記の例ではiも2に等しいため、ヌルターミネータを配置する必要があるポイントまでiを使用できます。

#include <stdio.h>

#define MAXLINE 1000 /* maximum input line size */

int getline(char line[], int maxline);
void copy(char to[], char from[]);

/* print longest input line */
int main(void)
{
  int len;               /* current line length */
  int max;               /* maximum length seen so far */
  char line[MAXLINE];    /* current input line */
  char longest[MAXLINE]; /* longest line saved here */

  max = 0;

  while((len = getline(line, MAXLINE)) > 0)
  {
    printf("%d: %s", len, line);

    if(len > max)
    {
      max = len;
      copy(longest, line);
    }
  }
  if(max > 0)
  {
    printf("Longest is %d characters:\n%s", max, longest);
  }
  printf("\n");
  return 0;
}

/* getline: read a line into s, return length */
int getline(char s[], int lim)
{
  int c, i, j;

  for(i = 0, j = 0; (c = getchar())!=EOF && c != '\n'; ++i)
  {
    if(i < lim - 1)
    {
      s[j++] = c;
    }
  }
  if(c == '\n')
  {
    if(i <= lim - 1)
    {
      s[j++] = c;
    }
    ++i;
  }
  s[j] = '\0';
  return i;
}

/* copy: copy 'from' into 'to'; assume 'to' is big enough */
void copy(char to[], char from[])
{
  int i;

  i = 0;
  while((to[i] = from[i]) != '\0')
  {
    ++i;
  }
}

私は正しいですか、それとも間違っていますか?

遺伝子

あなたは完全に正しくありません。入力文字列が制限よりも長い場合、ループは、結果文字列に入力されていなくても、入力文字をカウントするためにiをインクリメントし続けます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

奇妙なアルゴリズムのパフォーマンス

分類Dev

欲張りアルゴリズムの奇妙な振る舞い

分類Dev

C ++でのマージソートアルゴリズムの奇妙な振る舞い

分類Dev

C ++のBronKerboschアルゴリズム

分類Dev

Cのqsortアルゴリズム

分類Dev

C ++での分割アルゴリズム

分類Dev

JavaScriptのヒープのアルゴリズムにおけるforループの奇妙な振る舞い

分類Dev

Pythonでのダイクストラのアルゴリズムの奇妙な振る舞い

分類Dev

対角ヒューリスティックを使用したA *アルゴリズムの奇妙な動作

分類Dev

奇妙な振る舞いをする三目並べミニマックスアルゴリズム(C ++)

分類Dev

奇妙な結果を生み出す到着アルゴリズムの「確率ベースの」時間遅延?

分類Dev

MATLABでのbwareafiltの奇妙な動作と、それが使用するアルゴリズムは何ですか?

分類Dev

Javascriptキャンバスはアルゴリズムを使用して線の奇妙な動作を描画します

分類Dev

JS:このアルゴリズムは奇妙なことをしています(分析)

分類Dev

Spark-反復アルゴリズムによる奇妙な動作

分類Dev

Umbraco CMSの特別なC#ツリーアルゴリズム

分類Dev

RSAモンゴメリ乗算の異なるMWR2MMアルゴリズム間での奇妙な同一の誤った結果

分類Dev

C ++検索アルゴリズム-巨大なデータの処理

分類Dev

カテゴリデータでXBoostClassifierを使用してAzureAutoMLを使用する場合の奇妙なアルゴリズムの選択

分類Dev

ランダムな曲の再生アルゴリズム

分類Dev

平均的な顔-アルゴリズム

分類Dev

最適なアルゴリズム

分類Dev

基本的なJavascriptアルゴリズム(ParseExpression)

分類Dev

C#Windowsフォームアルゴリズムの計算

分類Dev

PYTHONのシンプルな宝くじアルゴリズム

分類Dev

複雑なC#Linqアルゴリズム

分類Dev

C-単純な順列アルゴリズム

分類Dev

C 基本的なソート アルゴリズム

分類Dev

順列アルゴリズムC ++

Related 関連記事

  1. 1

    奇妙なアルゴリズムのパフォーマンス

  2. 2

    欲張りアルゴリズムの奇妙な振る舞い

  3. 3

    C ++でのマージソートアルゴリズムの奇妙な振る舞い

  4. 4

    C ++のBronKerboschアルゴリズム

  5. 5

    Cのqsortアルゴリズム

  6. 6

    C ++での分割アルゴリズム

  7. 7

    JavaScriptのヒープのアルゴリズムにおけるforループの奇妙な振る舞い

  8. 8

    Pythonでのダイクストラのアルゴリズムの奇妙な振る舞い

  9. 9

    対角ヒューリスティックを使用したA *アルゴリズムの奇妙な動作

  10. 10

    奇妙な振る舞いをする三目並べミニマックスアルゴリズム(C ++)

  11. 11

    奇妙な結果を生み出す到着アルゴリズムの「確率ベースの」時間遅延?

  12. 12

    MATLABでのbwareafiltの奇妙な動作と、それが使用するアルゴリズムは何ですか?

  13. 13

    Javascriptキャンバスはアルゴリズムを使用して線の奇妙な動作を描画します

  14. 14

    JS:このアルゴリズムは奇妙なことをしています(分析)

  15. 15

    Spark-反復アルゴリズムによる奇妙な動作

  16. 16

    Umbraco CMSの特別なC#ツリーアルゴリズム

  17. 17

    RSAモンゴメリ乗算の異なるMWR2MMアルゴリズム間での奇妙な同一の誤った結果

  18. 18

    C ++検索アルゴリズム-巨大なデータの処理

  19. 19

    カテゴリデータでXBoostClassifierを使用してAzureAutoMLを使用する場合の奇妙なアルゴリズムの選択

  20. 20

    ランダムな曲の再生アルゴリズム

  21. 21

    平均的な顔-アルゴリズム

  22. 22

    最適なアルゴリズム

  23. 23

    基本的なJavascriptアルゴリズム(ParseExpression)

  24. 24

    C#Windowsフォームアルゴリズムの計算

  25. 25

    PYTHONのシンプルな宝くじアルゴリズム

  26. 26

    複雑なC#Linqアルゴリズム

  27. 27

    C-単純な順列アルゴリズム

  28. 28

    C 基本的なソート アルゴリズム

  29. 29

    順列アルゴリズムC ++

ホットタグ

アーカイブ