假设我有一个字符串值 "110099" 并且我需要以 x 为步长递增子字符串值 "00" 直到 y 并换行到零,如果 x =10 和 y=90 即 "111099","112099" ...在“119099”之后,字符串值为“110099”。谁能帮助我如何开始。谢谢你的时间。
编辑:将问题更改为通用的。
将其替换回原始字符串。
代码非常简单。
由于您只需要检查和更改一个数字,我会直接在字符串表示中进行。
也许是这样的:
#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
总是会生成下一个数字。
的规范具有"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);
}
只需增加第三个“数字”:
char s[] = "110099";
for ( ; ; )
{
printf("Current value: %s\n", s);
if (s[2] == '9') { s[2] = '0'; break; }
++s[2];
}
这假设您的字符集在升序范围内连续存储数字。
这很简单:
#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
目前尚不完全清楚您希望它有多灵活。您当前问题的解决方案可能是以下功能。
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