我正在使用netbeans在C中编写一个算法来查找字符串中的星号。
int main() {
int M=0, i, j;
scanf("%i",&M);
int pos[M];
char c[M];
scanf("%s", c);
i=0;
j=1;
while(c[i] != '\0'){
if(c[i]=='*'){
pos[j] = i;
j++;
}
i++;
}
printf("Asterisks in positions: \n\n");
for(j=1; j<=i; j++){
printf("%i", pos[j]);
}
return 0;
}
但它不起作用,即使M是一个小数字,也会打印很多数字。
答案 0 :(得分:2)
问题似乎是你从未考虑过找到的字符数。您使用i
而不是j
打印整个矢量进行迭代。保持匹配数的j
。
另外,尝试使用来自cstring的strchr:)
获取第一个位置,然后从下一个字符再次搜索,直到返回null。
答案 1 :(得分:1)
有关您找到的星号数的信息存储在计数器j中。此变量在for循环中重置:
for(j=1; j<=i; j++)
此外,这个for循环一直到i,这是你输入字符串的长度。尝试按如下方式重新处理循环:
for(i=1; i<j; i++){
printf("%i", pos[i]);
}
答案 2 :(得分:0)
在while
循环完成后,j
会保留记录的总位置数,因此您应该从pos[1]
打印到pos[j]
。您当前的循环从pos[1]
打印到pos[i]
。只需在最终循环中反转变量:
for(i=1; i<=j; i++){
printf("%i", pos[i]);
}