如何找到空格并存储到变量中?

时间:2014-11-25 04:47:39

标签: c++ arrays function

在这个程序中,我试图找到我的数组的空白区域,并将该值存储到变量中然后打印出该变量。我知道使用的唯一函数是isspace one,当我使用它时,我收到的错误是:'isspace':无法将参数1从'char [80]'转换为'int'

非常感谢任何帮助!

// Zachary Law Strings.cpp

#include <iostream>
using namespace std;
#include <string>
#include <iomanip>


int main()
{   int x, i,y;
char name[] = "Please enter your name: ";
char answer1 [80];
i=0;
y=0;

cout << name;
cin.getline(answer1, 79);
cout << endl;

x=strlen(answer1);

 for (int i = 0; i < x; i++){
    cout << answer1[i] << endl;
    if (isspace(answer1)) 
    {y=y+1;}}

 cout << endl << endl;
 cout << setw(80) << answer1;

 cout <<y;




return 0;}

3 个答案:

答案 0 :(得分:2)

每个窄字符分类函数都采用非{0}的int参数或特殊值EOF。否则行为未定义。并且大多数C ++实现char都是有符号类型,因此足够高的值(实际上,ASCII之外的所有字符)都会变为负数。

在添加相关索引后,将参数强制转换为unsigned char

if( isspace( (unsigned char) answer1[i] ) )

然后,得到的非负值将隐式转换为int


不要在分类函数的每次调用中放置一个强制转换,而是考虑以更加C ++友好的方式包装它们,例如。

auto is_space( char const c )
    -> bool
{ return ::isspace( (unsigned char) c ); }

答案 1 :(得分:1)

尝试以下方法:

for (int i = 0; i < x; i++){
    cout << answer1[i] << endl;
    if (isspace(answer1[i])) 
    {y=y+1;}}

答案 2 :(得分:0)

正如我之前所说,您将数组而不是char传递给isspace函数。

isspace功能接受: int isspace(int c);

/* isspace example */
#include <stdio.h>


#include <ctype.h>
int main ()
{
  char c;
  int i=0;
  char str[]="Example sentence to test isspace\n";
  while (str[i])
  {
    c=str[i];
    if (isspace(c)) c='\n';
    putchar (c);
    i++;
  }
  return 0;
}