Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的空白字符计数器_C - Fatal编程技术网

C语言中的空白字符计数器

C语言中的空白字符计数器,c,C,我试图创建一个小函数,返回字符中的空格数* 变量使用C语言 假设我有一个字符串:“hello hello”。我希望函数返回2。 这是我目前掌握的代码: int blankcounter(char* pline) { int i=0; int counter = 0; while (pline[i] != '\0') {

我试图创建一个小函数,返回字符中的空格数* 变量使用C语言

假设我有一个字符串:
“hello hello”
。我希望函数返回
2
。 这是我目前掌握的代码:

int blankcounter(char* pline)
{                              
  int i=0;                  
  int counter = 0;            
  while (pline[i] != '\0')       
  {                               
    if (pline[i++] ==' ')
      counter++;
  }
  return counter;
}

我阅读的源代码是一个txt文件,我必须补充的一点是,我发布的代码确实有效,但有一个缺点:例如,如果我想阅读:“你好,怎么了?”
我希望我的函数能够返回2,但它返回3,因为在单词
up之后出现了空格,你有什么建议让它返回2吗

问题:C中的空白字符计数器


回答:是的。

我想您可能不太想计算前导空格,“hello whats up”也应该返回2,对吗

我可以提出两个解决方案。首先是在开始计数之前修剪所有空格

第二种方法是将循环的起点和终点调整为第一个和最后一个非空格字符,然后执行计数:

int start=0;  
int end = strlen(pline);  
int i=0;  
while (pline[i++]==' ') start++;  
i=end-1;  
while (pline[i--]==' '&& i >= 0) end--;  
for (i=start; i<end; i++) { your count procedure} 
int start=0;
int end=斯特伦(普林线);
int i=0;
而(pline[i++]='')start++;
i=末端-1;
而(pline[i--]=''&&i>=0)结束--;

对于(i=start;我为我工作。它只检查文本空格。你可以使用
isspace
更一般。出于某种原因,它对我不起作用……即使我有一些空格,计数器仍保持在0上。你确定了吗?你应该使用
const char*
指向字符串。另外,
计数器
i
,和返回值应该都是无符号类型(负值没有意义)。你可以将
while
转换为
for
,尽管这可能只是一种偏好。我阅读的源代码是一个txt文件,我必须补充的一点是,我发布的代码确实有效,但有一个缺点:例如,如果我想阅读:
“你好,怎么了?”
我希望我的函数能够返回2,但它返回3,因为在单词
up
后面出现了空格,你有什么建议让它返回2吗?我想你可能不想把前导空格也算上“hello whats up”也应该返回2,对吗?我可以提出两种解决方案。第一种是在开始计数之前修剪所有空格。第二种是将循环的起点和终点调整为第一个和最后一个非空格字符,然后执行计数:int start=0;int end=strlen(pline);int I=0;while(pline[I++]='')启动+++;从字符串末尾往下走,调整“结束”。