0

文字列値「110099」があり、部分文字列値「00」を y まで x ずつインクリメントし、ゼロにラップする必要があるとします。 「119099」の後の文字列値は「110099」です。誰でもどうやって始めればいいのか教えてください。御時間ありがとうございます。

編集:質問を一般的なものに変更しました。

4

6 に答える 6

2

1 桁だけを確認して変更する必要があるため、文字列表現で直接行います。

おそらく次のようなものです:

#define INCR_INDEX 2

int increment(char *value)
{
  if( value[INCR_INDEX] == '9' )
  {
    value[INCR_INDEX] = '0';
    return 1;
  }
  ++value[INCR_INDEX];
  return 0;
}

上記はインクリメントを行い、1ラップされ0ていない場合は戻ります。

これはエンコーディングに関して 100% 安全です。C は、ホスティング環境が隣接する場所の 10 進数をエンコードすることを保証し++ます。char9

于 2012-10-09T11:20:12.243 に答える
2
  1. Take the substring you want to increment.
  2. Cast it to integer values.
  3. increment by 10 and then %100.
  4. Cast back to string.
  5. Replace it back in your original string.

    Code is pretty simple.

于 2012-10-09T11:17:54.100 に答える
1

の指定は"00"、変更する必要があるのは文字列の3番目の文字だけであるため誤解を招きます(2番目の文字は変更0され"00"ません)。aをインクリメントすることが可能であるcharため、3番目charが等しくない場合はインクリメント9し、そうでない場合は次のように設定します0

char a[] = "110099";

for (int i = 0; i < 20; i++)
{
    a[2] = ('9' == a[2]) ? '0' : a[2] + 1;
    printf("%s\n", a);
}

https://ideone.com/uMyfoでデモを参照してください。

于 2012-10-09T11:19:13.500 に答える
0

3番目の「桁」をインクリメントするだけです。

char s[] = "110099";

for ( ; ; )
{
    printf("Current value: %s\n", s);

    if (s[2] == '9') { s[2] = '0'; break; }
    ++s[2];
}

これは、文字セットが数字を昇順で連続して格納することを前提としています。

于 2012-10-09T11:18:34.087 に答える
0

これをどの程度柔軟にしたいかは完全には明らかではありません。現在の質問に対する解決策は、次の関数になる可能性があります。

void increment(char str*) {
    str[2]++;
    if (str[2]>'9') str[2]='0';
}

テスト:

char str[] = "110099";
for (int i = 0; i < 12; i++) {
    increment(str);
    printf("%s\n", str);
}

結果:

111099
112099
113099
114099
115099
116099
117099
118099
119099
110099
111099
112099
于 2012-10-09T11:27:42.913 に答える
0

それは些細なことです:

#include <stdio.h>

void incDigit(char* str, size_t pos)
{
  if (++str[pos] > '9')
    str[pos] = '0';
}

int main(void)
{
  char str[] = "110099";
  int i;

  printf("Original:   %s\n", str);

  for (i = 1; i <= 10; i++)
  {
    printf("Adding 1... ");
    incDigit(str, 2);
    printf("%s\n", str);
  }

  return 0;
}

出力 ( ideone ):

Original:   110099
Adding 1... 111099
Adding 1... 112099
Adding 1... 113099
Adding 1... 114099
Adding 1... 115099
Adding 1... 116099
Adding 1... 117099
Adding 1... 118099
Adding 1... 119099
Adding 1... 110099
于 2012-10-09T11:24:33.200 に答える