2015-06-10 61 views
-7

我正在使用下面的代码计算字符串中的空格,但我不想计算空格。如何不计算空格,同时计算字符串的长度c

#include<stdio.h> 
#include<conio.h> 

void main() 
{ 
    char*ptr,str[30]; 
    int size=0; 
    int word=0; 

    puts("enter the string"); 
    gets(str); 
    fflush(stdin); 

    for(ptr=str;*ptr!='\0',ptr++) 
    { 
     size++; 
    } 

    printf("size of string is = %d",size); 
    getchar(); 
} 
+0

,这是你写的代码?没有新线,没有空格,什么都没有? –

+6

这个python怎么样? –

+1

'void main'不是标准c。你使用的是非标准的编译器吗? – user2079303

回答

5

TL; DR;回答:当(在该指针位置)的值是空格时跳过计数器(size)增量。

请自行编写代码并将结果更新到我们的页面。

这就是说,恕我直言,第一你应该注意到(正确)的几件事情,因为

  1. void main()不达标。改为使用int main(void)
  2. 千万不要使用gets()。它严重受缓冲区溢出问题困扰。改为使用fgets()
  3. fflush(stdin)undefined behaviour。尽快摆脱它。
+1

就这个问题而言,只有答案提到'gets' - +1 – szczurcio

+1

@szczurcio和'fflush(stdin)'的邪恶。 :-) –

0

使用指针算术代替尝试使用以下码:

while (*ptr) { 
    if (*ptr != ' ') { 
     size++; 
    } 
} 

这将循环通过字符,直到它触及空终止“\ 0”,并根据需要进行递增。

+3

这对于手头的问题来说太过于矫枉过正。鉴于他已经有一个迭代所有角色的循环。只需跳过计数循环内的空格就简单多了。 – DrKoch

+0

非常好的一点。遍历字符和忽略空间是解决这个问题的一个非常有效的方法,并给出O(n)。我会改变我的答案。 :) – Arial

0

试试这个

int my_strlen(char *str) 
{ 
int i, j = 0; 
while (str[i] != '\0') 
{ 
    if (str[i] != ' ') 
     ++j; 
    ++i; 
} 
return j; 
} 
+3

另一个扰流器。保持OP从学习。幸运的是,你的代码有一个bug,所以OP需要学习更多 - 好。 – DrKoch

0

内,您的循环:

跳过空格

计数所有其他字符