0

我试图计算多少次.命令行传入的单个字符串中出现的次数。

打电话myprog "this...is a test."

返回The count is 0

我在这里做错了什么?

注意: 我知道此代码可能看起来很奇怪,但用于教育目的

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {

  int len = strlen(argv[1]);
  char *d = malloc (strlen(argv[1])+1);
  strcpy(d,argv[1]);
  char *p=d;
  int count;
  count=0;  
  while(*p){
    if (*p ==','){
      count++;
    }
    *p++;
  }

  printf("The count is: %d\n", count);
  return 0;
}
4

4 回答 4

4

您正在计算逗号的数量,而不是句点的数量。要计算周期,请将 if 语句更改为:

if (*p =='.'){
  count++;
}
于 2013-09-29T14:03:29.817 回答
3

这段代码有很多……奇怪的地方。很难猜出哪些是故意的,哪些不是,所以让我们逐行查看,看看有什么。

int len = strlen(argv[1]);
char *d = malloc (strlen(argv[1])+1);
strcpy(d,argv[1]);

看起来您可能打算在某个时候使用 len,但就目前而言,您得到len,然后重新计算相同的值以使用它。大概您的意图更像是:

size_t len = strlen(argv[1]);
char *d = malloc(len+1);
strcpy(d, argv[1]);

然而,我注意到,真的没有理由这样做。由于您只是想检查内容,您不妨argv[1]直接使用(或创建另一个指向同一位置的指针并使用它)。

char *p=d;

这将创建另一个指向与 相同位置的指针d。你真的不需要d开始,你也不需要这个,但它是相当无害的。

int count;
count=0;  

我(强烈)希望看到已count初始化而不是未初始化,然后分配一个值。由于它不可能为负数,我可能还会将其设为无符号类型:size_t count = 0;

while(*p){
  if (*p ==','){
    count++;
  }
  *p++;
}

正如其他人已经指出的那样,您在这里与错误的值进行比较。但是,我还要注意,当您进行初始化、测试和某种“增量”操作时,使用for循环而不是循环几乎肯定会更好while

另外,这里的增量部分有点错误。你真的只有想要p++,没有*p++

for (char *p=d; *p; ++p)
   if (*p == '.')
       ++count;

当我们开始着手时,该循环的稍微修改的版本几乎是我们完成整个任务所需的全部内容:

char const *p;
for (p = argv[1]; *p; ++p)
   if (*p == '.')
       ++count;
于 2013-09-29T14:17:07.660 回答
1

改变

if (*p ==',')  

if (*p =='.')  

.

于 2013-09-29T14:03:51.633 回答
1

我相信只是一个错字。用。。。来代替 '。' 它会返回“4”,我刚刚测试过。

于 2013-09-29T14:08:32.450 回答