我想知道这个小代码有什么问题,它没有提供预期的结果
I would like to know what's wrong with this tiny code that it doesn't provide the expected results
简而言之,这个程序的目的是循环遍历给定的字符串数组,并在将任何逗号 (,) 更改为冒号 (:) 后按原样打印出来。
int main(int argc, string argv[])
{
int i;
int j;
int n;
int x;
int count = 0;
for ( i = 1, n = argc -1; i <= n; i++)
{
for ( j = 0, x = strlen(argv[i]); j < x; j++)
{
if(strcmp(&argv[i][j], ",") == 0)
{
//count++;
printf(":");
}
else {printf("%c", argv[i][j]);}
}
}
printf("\n");
//printf("Count = %i & i = %i & j= %i\n", count, i, j);
//printf("x= %i\n",x);
}
这是我在 运行 代码后得到的结果:
$ ./conversion 12, 1,2 ,12
12:1,2,12
我期望得到的是这个:
$ ./conversion 12, 1,2 ,12
12:1:2:12
结论:
我相信由于某种原因,逗号在字符串的 beginning/middle 中无法识别
如果它位于文本的末尾,它就可以工作。希望您能告诉我如何获得预期的结果。
提前致谢!
表达式&argv[i][j]
是从j-th字符开始的i-th字符串。当您将其与逗号字符串进行比较时,","
仅当逗号位于字符串末尾时才会匹配。在您的示例中,逗号在 "12,"
中找到,但在 "1,2"
或 ",12"
.
中找不到
打印字符时,使用不带&
的表达式argv[i][j]
,即i-th 字符串的j-th 字符。在检查逗号时也使用它:
if (argv[i][j] == ',') // comma found!
当然,您必须在此处检查单引号中的字符文字。 strcmp
对于比较 null-terminated 字符串很有用。单个字符可以用普通的比较运算符进行比较。
简而言之,这个程序的目的是循环遍历给定的字符串数组,并在将任何逗号 (,) 更改为冒号 (:) 后按原样打印出来。
int main(int argc, string argv[])
{
int i;
int j;
int n;
int x;
int count = 0;
for ( i = 1, n = argc -1; i <= n; i++)
{
for ( j = 0, x = strlen(argv[i]); j < x; j++)
{
if(strcmp(&argv[i][j], ",") == 0)
{
//count++;
printf(":");
}
else {printf("%c", argv[i][j]);}
}
}
printf("\n");
//printf("Count = %i & i = %i & j= %i\n", count, i, j);
//printf("x= %i\n",x);
}
这是我在 运行 代码后得到的结果:
$ ./conversion 12, 1,2 ,12
12:1,2,12
我期望得到的是这个:
$ ./conversion 12, 1,2 ,12
12:1:2:12
结论: 我相信由于某种原因,逗号在字符串的 beginning/middle 中无法识别 如果它位于文本的末尾,它就可以工作。希望您能告诉我如何获得预期的结果。
提前致谢!
表达式&argv[i][j]
是从j-th字符开始的i-th字符串。当您将其与逗号字符串进行比较时,","
仅当逗号位于字符串末尾时才会匹配。在您的示例中,逗号在 "12,"
中找到,但在 "1,2"
或 ",12"
.
打印字符时,使用不带&
的表达式argv[i][j]
,即i-th 字符串的j-th 字符。在检查逗号时也使用它:
if (argv[i][j] == ',') // comma found!
当然,您必须在此处检查单引号中的字符文字。 strcmp
对于比较 null-terminated 字符串很有用。单个字符可以用普通的比较运算符进行比较。