英文:
How to write a function in c that counts words
问题
以下是翻译好的部分:
"I had an exam yesterday in which one of the questions was about counting words in a given string.
The definition of word would be a portion of a string that is divided by spaces and/or the beginning/end of the string
I am new to C, and was not able to create a condition where it increases the counter word when you find “space (characters) space”
int count_words(char *str)
{
int i = 0;
int word = 2;
while (str[i])
{
if (str[i] == ' ')
{
int l = 1;
while (str[i + l])
{
l++;
}
if (l != 1)
{
word++;
}
}
i++;
}
return word;
}
请注意,我已经将代码部分翻译成中文。
英文:
I had an exam yesterday in which one of the questions was about counting words in a given string.
The definition of word would be a portion of a string that is divided by spaces and/or the beginning/end of the string
I am new to C, and was not able to create a condition where it increases the counter word when you find “space (characters) space”
int count_words(char *str)
int i = 0;
int word = 2;
while (str[i])
{
if (str[i] == ‘ ‘)
{
int l = 1;
while (str[i + l]
{
l++;
}
if (l != 1)
{
word++;
}
}
}
答案1
得分: 1
以下是翻译好的部分:
对于开始,函数应该声明如下:
size_t count_words(const char *str);
函数参数应该使用`const`关键字声明,因为传递的字符串在函数内部不会被更改,函数返回类型应该是`size_t`,这与标准字符串函数`strlen`的返回类型相同。
不清楚为什么在您的函数中初始化变量`word`为`2`
int word = 2;
或者变量`i`在函数内部未被更改。
函数可以如下所示,如下演示程序所示:
#include <ctype.h>
#include <string.h>
#include <stdio.h>
size_t count_words( const char *s )
{
size_t n = 0;
while ( *s )
{
while ( isspace( ( unsigned char )*s ) ) ++s;
if ( *s )
{
++n;
while ( *s && !isspace( ( unsigned char )*s ) ) ++s;
}
}
return n;
}
int main( void )
{
const char *s = "How to write a function in c that counts words";
size_t n = count_words( s );
printf( "The string \"%s\"\ncontains %zu words\n", s, n );
}
程序输出是
The string "How to write a function in c that counts words"
contains 10 words
如果仅使用空格字符' '
作为分隔符,那么应删除头文件<ctype.h>
,函数将如下所示:
size_t count_words( const char *s )
{
size_t n = 0;
while ( *s )
{
while ( *s == ' ' ) ++s;
if ( *s )
{
++n;
while ( *s && *s != ' ' ) ++s;
}
}
return n;
}
可以处理任何分隔符的更通用的函数可以如下所示:
size_t count_words( const char *s, const char *delim )
{
size_t n = 0;
while (*s)
{
s += strspn( s, delim );
if (*s)
{
++n;
s += strcspn( s, delim );
}
}
return n;
}
该函数具有第二个参数,用于指定分隔符。例如,函数可以这样调用:
size_t n = count_words( s, " \t?!:;,." );
英文:
For starters the function should be declared like
size_t count_words(const char *str);
The function parameter should be declared with the qualifier const
because the passed string is not being changed within the function and the function return type should be size_t
that is the same return type as for example of standard string function strlen
.
It is unclear why the variable word
in your function is initialized by 2
int word = 2;
Or the variable i
is not being changed within the function.
The function can look the following way as shown in the demonstration program below
#include <ctype.h>
#include <string.h>
#include <stdio.h>
size_t count_words( const char *s )
{
size_t n = 0;
while ( *s )
{
while ( isspace( ( unsigned char )*s ) ) ++s;
if ( *s )
{
++n;
while ( *s && !isspace( ( unsigned char )*s ) ) ++s;
}
}
return n;
}
int main( void )
{
const char *s = "How to write a function in c that counts words";
size_t n = count_words( s );
printf( "The string \"%s\"\ncontains %zu words\n", s, n );
}
The program output is
The string "How to write a function in c that counts words"
contains 10 words
If to use as delimiters only the space character ' '
then the header <ctype.h>
should be removed and the function will look like
size_t count_words( const char *s )
{
size_t n = 0;
while ( *s )
{
while ( *s == ' ' ) ++s;
if ( *s )
{
++n;
while ( *s && *s != ' ' ) ++s;
}
}
return n;
}
A more general function that can process any delimiters can look the following way
size_t count_words( const char *s, const char *delim )
{
size_t n = 0;
while (*s)
{
s += strspn( s, delim );
if (*s)
{
++n;
s += strcspn( s, delim );
}
}
return n;
}
The function has a second parameter that specifies delimiters. For example the function can be called loke
size_t n = count_words( s, " \t?!:;,." );
答案2
得分: 0
请参照以下方式尝试:
# include <stdio.h>
# include <string.h>
# define MaxBufferSize 50
void main(){
int count = 0, size;
char str[MaxBufferSize + 2];
printf("Enter string (最多50个字符): ");
if(fgets(str, sizeof(str), stdin)) {
if(strlen(str) > MaxBufferSize) printf("已超过最大字符数,仅使用前50个字符!!!\n");
str[strcspn(str, "\n")] = '# include <stdio.h>
# include <string.h>
# define MaxBufferSize 50
void main(){
int count = 0, size;
char str[MaxBufferSize + 2];
printf("Enter string (最多50个字符): ");
if(fgets(str, sizeof(str), stdin)) {
if(strlen(str) > MaxBufferSize) printf("已超过最大字符数,仅使用前50个字符!!!\n");
str[strcspn(str, "\n")] = '\0';
}
size = strlen(str);
int i = 0;
if(size == 0) printf("未输入任何内容\n");
else {
while(i < size){
while(!isalnum(str[i]) && i < size) i++; // 忽略所有空格和其他字符
if(str[i] == '\0') break;
while(isalnum(str[i]) && i < size) i++; // 包括所有单词和数字
count++;
}
printf("字符串中的单词数: %d\n", count);
}
}
';
}
size = strlen(str);
int i = 0;
if(size == 0) printf("未输入任何内容\n");
else {
while(i < size){
while(!isalnum(str[i]) && i < size) i++; // 忽略所有空格和其他字符
if(str[i] == '# include <stdio.h>
# include <string.h>
# define MaxBufferSize 50
void main(){
int count = 0, size;
char str[MaxBufferSize + 2];
printf("Enter string (最多50个字符): ");
if(fgets(str, sizeof(str), stdin)) {
if(strlen(str) > MaxBufferSize) printf("已超过最大字符数,仅使用前50个字符!!!\n");
str[strcspn(str, "\n")] = '\0';
}
size = strlen(str);
int i = 0;
if(size == 0) printf("未输入任何内容\n");
else {
while(i < size){
while(!isalnum(str[i]) && i < size) i++; // 忽略所有空格和其他字符
if(str[i] == '\0') break;
while(isalnum(str[i]) && i < size) i++; // 包括所有单词和数字
count++;
}
printf("字符串中的单词数: %d\n", count);
}
}
') break;
while(isalnum(str[i]) && i < size) i++; // 包括所有单词和数字
count++;
}
printf("字符串中的单词数: %d\n", count);
}
}
希望对你有所帮助...!
英文:
Try this way:
# include<stdio.h>
# include<string.h>
# define MaxBufferSize 50
void main(){
int count =0, size;
char str[MaxBufferSize+2];
printf("Enter string(max char 50 only): ");
if(fgets(str,sizeof(str), stdin)) {
if(strlen(str) > MaxBufferSize) printf("Max chars exceeded so chars before the limit were used!!!\n");
str[strcspn(str, "\n")] = '# include<stdio.h>
# include<string.h>
# define MaxBufferSize 50
void main(){
int count =0, size;
char str[MaxBufferSize+2];
printf("Enter string(max char 50 only): ");
if(fgets(str,sizeof(str), stdin)) {
if(strlen(str) > MaxBufferSize) printf("Max chars exceeded so chars before the limit were used!!!\n");
str[strcspn(str, "\n")] = '\0';
}
size = strlen(str);
int i=0;
if(size == 0) printf("Nothing entered\n");
else {
while(i<size){
while(!isalnum(str[i]) && i<size) i++;// ignores all spaces and other chars
if(str[i] == '\0') break;
while(isalnum(str[i]) && i<size) i++;// includes all words and numbers
count++;
}
printf("Words in string: %d\n",count);
}
}
';
}
size = strlen(str);
int i=0;
if(size == 0) printf("Nothing entered\n");
else {
while(i<size){
while(!isalnum(str[i]) && i<size) i++;// ignores all spaces and other chars
if(str[i] == '# include<stdio.h>
# include<string.h>
# define MaxBufferSize 50
void main(){
int count =0, size;
char str[MaxBufferSize+2];
printf("Enter string(max char 50 only): ");
if(fgets(str,sizeof(str), stdin)) {
if(strlen(str) > MaxBufferSize) printf("Max chars exceeded so chars before the limit were used!!!\n");
str[strcspn(str, "\n")] = '\0';
}
size = strlen(str);
int i=0;
if(size == 0) printf("Nothing entered\n");
else {
while(i<size){
while(!isalnum(str[i]) && i<size) i++;// ignores all spaces and other chars
if(str[i] == '\0') break;
while(isalnum(str[i]) && i<size) i++;// includes all words and numbers
count++;
}
printf("Words in string: %d\n",count);
}
}
') break;
while(isalnum(str[i]) && i<size) i++;// includes all words and numbers
count++;
}
printf("Words in string: %d\n",count);
}
}
hope it helps...!
答案3
得分: 0
#include <stdio.h>
int count_words(char *str) {
int i, count = 0;
int in_word = 0; // Flag to track if we're currently inside a word or not
// Loop through each character in the string
for (i = 0; str[i] != '#include <stdio.h>
int count_words(char *str) {
int i, count = 0;
int in_word = 0; // Flag to track if we're currently inside a word or not
// Loop through each character in the string
for (i = 0; str[i] != '\0'; i++) {
// If current character is not a space or newline and we're not already inside a word, increment word count
if ((str[i] != ' ' && str[i] != '\n') && !in_word) {
count++;
in_word = 1; // Set flag to indicate we're currently inside a word
}
// If current character is a space or newline, set flag to indicate we're not inside a word
else if (str[i] == ' ' || str[i] == '\n') {
in_word = 0;
}
}
return count;
}
'; i++) {
// If current character is not a space or newline and we're not already inside a word, increment word count
if ((str[i] != ' ' && str[i] != '\n') && !in_word) {
count++;
in_word = 1; // Set flag to indicate we're currently inside a word
}
// If current character is a space or newline, set flag to indicate we're not inside a word
else if (str[i] == ' ' || str[i] == '\n') {
in_word = 0;
}
}
return count;
}
英文:
#include <stdio.h>
int count_words(char *str) {
int i, count=0;
int in_word = 0; // Flag to track if we're currently inside a word or not
// Loop through each character in the string
for(i=0; str[i]!=' #include <stdio.h>
int count_words(char *str) {
int i, count=0;
int in_word = 0; // Flag to track if we're currently inside a word or not
// Loop through each character in the string
for(i=0; str[i]!='\0'; i++) {
// If current character is not a space or newline and we're not already inside a word, increment word count
if((str[i]!=' ' && str[i]!='\n') && !in_word) {
count++;
in_word = 1; // Set flag to indicate we're currently inside a word
}
// If current character is a space or newline, set flag to indicate we're not inside a word
else if(str[i]==' ' || str[i]=='\n') {
in_word = 0;
}
}
return count;
}
'; i++) {
// If current character is not a space or newline and we're not already inside a word, increment word count
if((str[i]!=' ' && str[i]!='\n') && !in_word) {
count++;
in_word = 1; // Set flag to indicate we're currently inside a word
}
// If current character is a space or newline, set flag to indicate we're not inside a word
else if(str[i]==' ' || str[i]=='\n') {
in_word = 0;
}
}
return count;
}
答案4
得分: -1
#include <stdio.h>
#include <string.h>
void main()
{
char s[200];
int count = 0, i;
printf("输入字符串:\n");
scanf("%[^\n]s", s);
for (i = 0; s[i] != '#include <stdio.h>
#include <string.h>
void main()
{
char s[200];
int count = 0, i;
printf("输入字符串:\n");
scanf("%[^\n]s", s);
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] == ' ' && s[i+1] != ' ')
count++;
}
printf("给定字符串中的单词数为: %d\n", count + 1);
}
'; i++)
{
if (s[i] == ' ' && s[i+1] != ' ')
count++;
}
printf("给定字符串中的单词数为: %d\n", count + 1);
}
使用这段代码,它肯定可以正常运行
英文:
#include <stdio.h>
#include <string.h>
void main()
{
char s[200];
int count = 0, i;
printf("Enter the string:\n");
scanf("%[^\n]s", s);
for (i = 0;s[i] != ' #include <stdio.h>
#include <string.h>
void main()
{
char s[200];
int count = 0, i;
printf("Enter the string:\n");
scanf("%[^\n]s", s);
for (i = 0;s[i] != '\0';i++)
{
if (s[i] == ' ' && s[i+1] != ' ')
count++;
}
printf("Number of words in given string are: %d\n", count + 1);
}
';i++)
{
if (s[i] == ' ' && s[i+1] != ' ')
count++;
}
printf("Number of words in given string are: %d\n", count + 1);
}
Use this code it will definitely works fine ):
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论