字符串中的子字符串增量

时间:2012-10-09 11:12:20

标签: c string

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

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

6 个答案:

答案 0 :(得分:2)

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

    代码非常简单。

答案 1 :(得分: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的数字将始终生成下一个数字。

答案 2 :(得分:1)

"00"的规范具有误导性,因为它只是字符串中需要更改的第三个字符(0中的第二个"00"永远不会更改)。如果第三个char不等于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上的演示。

答案 3 :(得分:0)

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

char s[] = "110099";

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

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

这假定您的字符集将数字连续存储在升序范围内。

答案 4 :(得分: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

答案 5 :(得分: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