c语言 - 我想知道这个小代码有什么问题,它没有提供预期的结果



简而言之,该程序的目的是循环遍行给定的字符串数组,并将任意逗号(,)更改为冒号(:)后原样打印出来。

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= %in", count, i, j);
  //printf("x= %in",x);
}
下面是我运行代码后得到的结果:
$ ./conversion 12, 1,2 ,12
12:1,2,12

我期望得到的是:

$ ./conversion 12, 1,2 ,12
12:1:2:12

结论:我相信由于某种原因,逗号在字符串的开始/中间是不被识别的如果它在文本的末尾,它是有效的。我希望你能告诉我怎样才能得到预期的结果。

提前感谢!

表达式&argv[i][j]是从第j个字符开始的第i个字符串。当你把它和逗号字符串比较时,","只有当逗号在字符串的末尾时才会匹配。在您的示例中,逗号出现在"12,"中,但没有出现在"1,2"",12"中。

在打印字符时,使用表达式argv[i][j]而不使用&,这是第i个字符串的第j个字符。当你检查逗号时也可以使用:

if (argv[i][j] == ',') // comma found!

当然,您必须检查这里的单引号中的字符字面量。strcmp用于比较以空结尾的字符串。单个字符可与普通比较操作符进行比较。

相关内容

  • 没有找到相关文章

最新更新