在这个程序中,我试图找到我的数组的空白区域,并将该值存储到变量中然后打印出该变量。我知道使用的唯一函数是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;}
答案 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;
}