我想知道是否有人能够提出一个否定使用多个if语句的解决方案。所以我的请求很清楚,已经提供了两组代码。第一组代码是工作代码,第二组代码是尝试编写一个满足优雅解决方案目的的循环(即通过将工作答案中使用的模式表示为一般算法)。 / p>
#include <stdio.h>
#include <string.h>
int main()
{
char str[10] = "copy000000";
int i = 9;
int a,b,c;
for (a = 0; a < 10; a++)
{
str[i]++;
for (b = 0; b < 6; b++)
{
if (str[5] == ':')
{
str[5] = '0';
str[4]++;
}
if (str[6] == ':')
{
str[6] = '0';
str[5]++;
}
if (str[7] == ':')
{
str[7] = '0';
str[6]++;
}
if (str[8] == ':')
{
str[8] = '0';
str[7]++;
}
if (str[9] == ':')
{
str[9] = '0';
str[8]++;
}
}
printf("string is: %s\n", str);
b = 0;
}
return 0;
}
此代码生成以下形式的输出:
string is: copy000001
string is: copy000002
string is: copy000003
string is: copy000004
string is: copy000005
string is: copy000006
string is: copy000007
string is: copy000008
string is: copy000009
string is: copy000010
string is: copy000011
string is: copy000012
string is: copy000013
尝试解决方案以概括if循环的迭代方式:
for (c = 0; c < 5; c++)
{
if (str[d] == ':')
{
str[d] = '0';
str[d-1]++;
d++;
}
}
生成以下形式的输出:
string is: copy000001
string is: copy000002
string is: copy000003
string is: copy000004
string is: copy000005
string is: copy000006
string is: copy000007
string is: copy000008
string is: copy000009
string is: copy00000:
string is: copy00000;
string is: copy00000<
string is: copy00000=
任何想法都会受到赞赏。
答案 0 :(得分:0)
只需使用b变量进行循环内部循环就可以了:
for(b=9; b > 4; b--){
if(str[b]==':'){
str[b] = '0';
str[b-1]++;
}
}
您只需将数字从最后一位数字增加到第一位。
如果您只需要打印,请考虑将数字保留为整数或长整数,并使用printf%d选项进行打印,如C/C++ reference
中所述 编辑:错过了分号