C 我没有得到所需的输出
这个程序的输出是得到一个句子中的单词数,而不考虑问题中提到的空格或任何符号的数量 问题是: 将给出一行英文文本,其中单词之间用一隔开 在下列符号中: “'\t',”,“,”和“;” 每个单词可以用一个或多个字母与下一个和上一个单词分开 更多的下列符号。你得数一数字数 在句子中 请注意,要读取输入,必须一直读取,直到EOF符号消失 阅读,如下例所示C 我没有得到所需的输出,c,C,这个程序的输出是得到一个句子中的单词数,而不考虑问题中提到的空格或任何符号的数量 问题是: 将给出一行英文文本,其中单词之间用一隔开 在下列符号中: “'\t',”,“,”和“;” 每个单词可以用一个或多个字母与下一个和上一个单词分开 更多的下列符号。你得数一数字数 在句子中 请注意,要读取输入,必须一直读取,直到EOF符号消失 阅读,如下例所示 int main() { int c; c = getchar(); while ( c != EOF ) {
int main()
{
int c;
c = getchar();
while ( c != EOF ) {
c = getchar();
}
return 0;
}
注意:不使用数组也可以解决此问题,因此
线路的最大长度并不重要
输入
由一个或多个单词隔开的一行英文文本
符号的更多出现
“'\t',”,“,”和“;”
输出
行中的字数
样本输入
样本输出
我知道我必须使用问题中给出的格式,但我不知道如何使用它
我只知道当单词之间只有一个空格或一个\t分隔时,查找句子中单词数量的程序。但是,我没有任何想法来解决这个问题。这是四个元素的简单应用 虽然 格查尔 转换 printf 以下代码显示了实现该功能的一种方法:
#include <stdio.h> // getchar(), EOF, printf()
int main( void )
{
int wordCount = 0;
int ch;
int inWord = 0;
while( (ch = getchar()) != EOF )
{
switch( ch )
{
case ' ':
case '\t':
case '.':
case ',':
case ';':
inWord = 0;
break;
default:
if ( !inWord )
{
wordCount++;
inWord = 1;
}
break;
} // end switch
} // end while
printf( "\n%d\n", wordCount );
return 0;
}
像这样
#include <stdio.h>
#include <stdbool.h>
bool IsDelimiter(char ch, const char *delimiters){
while(*delimiters)
if(*delimiters++ == ch)
return true;
return false;
}
int main(void){
bool prev_is_delmiter = true;
int ch, wc = 0;
while((ch = getchar()) != EOF && ch != '\n'){
bool current_is_delmiter = IsDelimiter(ch, " \t,.;");
if(prev_is_delmiter && !current_is_delmiter){
++wc;
}
prev_is_delmiter = current_is_delmiter;
}
printf("%d\n", wc);
}
当您在字符之间交互时,它们在['''\t','.','和';']的集合中,或者不是。此外,您当前处于“单词中”或“不在单词中”,并且该状态可以通过正在检查的字符进行更改。如果状态变为“在一个单词中”,增加你的单词数。当然,你没有得到想要的输出,因为你的程序基本上什么都没有做。我投票将这个问题作为离题题来结束,因为OP没有做任何事情来满足作业的要求。无论如何,作业都很糟糕。我的意思是,我想立即用NUL终止符初始化一个包含“not in a word”字符的静态常量数组,这样就可以仔细检查以确定任何给定字符是否是单词的一部分:没有数组,这意味着一个case开关或if/else梯形图:@MartinJames就解决这个问题而言,如果问题中没有数组注释,我假设它说,为了阻止学生先将输入读入数组,然后再对其进行解析。我不认为它试图阻止学生使用数组来实现输入流解析逻辑。好答案:计算边缘是最好的主意,因为它使用可选的前导/尾随分隔符很好地处理第一个和最后一个单词。
#include <stdio.h> // getchar(), EOF, printf()
int main( void )
{
int wordCount = 0;
int ch;
int inWord = 0;
while( (ch = getchar()) != EOF )
{
switch( ch )
{
case ' ':
case '\t':
case '.':
case ',':
case ';':
inWord = 0;
break;
default:
if ( !inWord )
{
wordCount++;
inWord = 1;
}
break;
} // end switch
} // end while
printf( "\n%d\n", wordCount );
return 0;
}
[one of delimiters]...[one of delimiters][not one of delimiters]...
^^ count this edge.
#include <stdio.h>
#include <stdbool.h>
bool IsDelimiter(char ch, const char *delimiters){
while(*delimiters)
if(*delimiters++ == ch)
return true;
return false;
}
int main(void){
bool prev_is_delmiter = true;
int ch, wc = 0;
while((ch = getchar()) != EOF && ch != '\n'){
bool current_is_delmiter = IsDelimiter(ch, " \t,.;");
if(prev_is_delmiter && !current_is_delmiter){
++wc;
}
prev_is_delmiter = current_is_delmiter;
}
printf("%d\n", wc);
}