C编程中字符串中的字数计数(我得到的是空字符常量错误)

C编程中字符串中的字数计数(我得到的是空字符常量错误),c,C,我的代码是不计算字符串中的任何单词。 但是(a[i]='')显示空字符常量错误 #include <stdio.h> int main() { char a[20]; int i,c1=0,c2=0; scanf("%[^\n]",a); for(i=0;a[i]!='\0';i++) { c1++; if(a[i]=='') c2++; } printf("%d\n

我的代码是不计算字符串中的任何单词。 但是(a[i]='')显示空字符常量错误

#include <stdio.h>

int main() {

    char a[20];

    int i,c1=0,c2=0;

    scanf("%[^\n]",a);

    for(i=0;a[i]!='\0';i++)
    {
        c1++;

        if(a[i]=='')

        c2++;
    }
    printf("%d\n",c1);

    printf("%d",c2+1);

    return 0;
}
#包括
int main(){
chara[20];
int i,c1=0,c2=0;
scanf(“%[^\n]”,a);
对于(i=0;a[i]!='\0';i++)
{
c1++;
如果(a[i]=='')
c2++;
}
printf(“%d\n”,c1);
printf(“%d”,c2+1);
返回0;
}
输入-汤姆在这里

我预计输出为-11 三,

编译错误-在函数“main”中:

程序c:10:15:错误:空字符常量 如果(a[i]=='') ^
#包括
#include <stdio.h>

int main() {

    char str[50];

    int i, numberOfWords=0;

    gets(str);

    for(i=0; str[i]!='\0'; i++) {
        if(str[i] == 32) //ascii code of space is 32
            numberOfWords++;
    }
    printf("number of words = %d\n", numberOfWords + 1);
    //adding 1 to numberOfWords because if there are two words, there will be 2-1=1 space between them. eg= "Hello World"

    return 0;
}
int main(){ char-str[50]; int i,numberOfWords=0; 获取(str); 对于(i=0;str[i]!='\0';i++){ if(str[i]==32)//空格的ascii码是32 numberOfWords++; } printf(“字数=%d\n”,numberOfWords+1); //将1添加到numberOfWords,因为如果有两个单词,它们之间将有2-1=1个空格。例如=“Hello World” 返回0; }
与空字符串文字(
“”
)相比,字符文字总是需要包含一个字符(正好一个)*。将
'
替换为
'
,您的代码至少应该编译

但是,代码将按原样计算空格数。如果字符串包含多个后续空格,会发生什么情况?另外,您还需要考虑选项卡吗?你想如何解释标点符号?单词的一部分还是分隔符?那么数字呢

根据您回答所有这些问题的方式,您可能需要更改下面代码中的条件。在任何情况下,我建议对您的输入进行有状态迭代:

int isSeparator = 1; // so you will count the first word occuring, too, even if starting
                     // at first character of the string
for(char const* s = str; *s; ++s)
{
    if(isalnum((unsigned char)*s)) // requires <ctype.h> header; modify condition
                                   // appropriately if you want different
                                   // characters to count as word parts
    {
        wordCount += isSeparator;
        isSeparator = 0;
    }
    else
    {
        isSeparator = 1;
    }
}
int isSeparator=1;//所以你也要数一数出现的第一个单词,即使是开始
//在字符串的第一个字符处
用于(字符常量*s=str;*s;++s)
{
if(isalnum((unsigned char)*s))//需要标头;修改条件
//如果你想要不同的
//要计为单词部分的字符
{
wordCount+=isSeparator;
isSeparator=0;
}
其他的
{
isSeparator=1;
}
}

*实际上,该标准允许使用多字节字符,因此准确地说,我们需要声明“至少一个字符”,但这些多字节字符具有实现定义的含义,通常没有任何用处,因此出于实际原因,我们可能会使用技术上不太正确的“恰好一个字符”…

如果(a[i]==''对您来说意味着什么?您希望
''
做什么或表示什么?与空字符串文字(
''
)相比,字符文字总是需要包含一个字符(正好一个)。将
'
替换为
'
..@Aconcagua为什么您决定将其作为注释而不是答案?可能是重复的(也许这就是为什么…)。ok..空格的ascii用于此目的。谢谢只是“GET”不起作用,因为它已经过时,使用起来很危险。此外,由于未定义“a”(在[i]==32中),代码将有编译时错误。请把它改成“str”。再次感谢你;请不要建议使用32来代替
'
(在两个引号之间有一个简单的空格)。
'
32
:使用前者,如果您为本地系统编码字符(如给定情况),您将以这种方式保持便携性。如果您需要强制ASCII(兼容)输出(例如到文件或套接字),即使本地编码可能不同,也可以使用后者。在后一种情况下,最好使用一些函数,如
toascii(“”)
toascii(“someString”)
,如果它存在于这样的系统中……请注意,大多数人会将
“一个或多个单词”
这样的字符串视为包含4个单词,即使该字符串中有8个空格(一个在开头,两个在单词之间,另一个在结尾)。那是在我们处理制表符、换行符等之前。你的算法有点太简单了。