我正在尝试计算.
在命令行传入的单个字符串中出现的次数。
致电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;
}
答案 0 :(得分:4)
您正在计算逗号的数量,而不是句号。要计算句点,请将if语句更改为:
if (*p =='.'){
count++;
}
答案 1 :(得分: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
循环代替{{1}几乎肯定会更好。 }循环。
另外,这里增量部分有点不对。你真的只想要while
,而不是p++
。
*p++
当我们开始讨论它时,该循环的略微修改版本几乎是我们对整个任务真正需要的全部内容:
for (char *p=d; *p; ++p)
if (*p == '.')
++count;
答案 2 :(得分:1)
更改
if (*p ==',')
到
if (*p =='.')
计算.
。
答案 3 :(得分:1)
我相信只有一个错字。用。。。来代替 '。'并且它将返回“4”,我刚刚测试过它。