0

假设我有一个字符串值 "110099" 并且我需要以 x 为步长递增子字符串值 "00" 直到 y 并换行到零,如果 x =10 和 y=90 即 "111099","112099" ...在“119099”之后,字符串值为“110099”。谁能帮助我如何开始。谢谢你的时间。

编辑:将问题更改为通用的。

4

6 回答 6

2
  1. 获取要增加的子字符串。
  2. 将其转换为整数值。
  3. 增加 10,然后增加 %100。
  4. 弹回字符串。
  5. 将其替换回原始字符串。

    代码非常简单。

于 2012-10-09T11:17:54.100 回答
2

由于您只需要检查和更改一个数字,我会直接在字符串表示中进行。

也许是这样的:

#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 保证托管环境对相邻位置的十进制数字进行编码,因此++持有char任何小于的数字9总是会生成下一个数字。

于 2012-10-09T11:20:12.243 回答
1

的规范具有"00"误导性,因为它只是字符串中的第三个字符需要更改(第二个字符0从不"00"更改)。可以增加 achar所以如果第三个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

只需增加第三个“数字”:

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

这很简单:

#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 回答
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 回答