在 c 中创建 count_letters 函数?
creating a count_letters function in c?
任务:创建一个 C 代码,从用户那里获取一些文本输入并打印出其中的字母数。字母可以是任何大写或小写字母字符,但不应包含任何标点符号、数字或其他符号。
- 我写了这段代码,但它打印了错误的输出(例如,如果输入是“Ad”,输出是“1 个字母”!)而且我找不到其中的错误!
谢谢!
#include <stdio.h>
#include <ctype.h>
#include <cs50.h>
#include <string.h>
int main (void)
{
char alphabets[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
string text = get_string("Text: ");
int length = strlen(text);
int n = 0;
for (int i = 0; i < length; i++)
{
for (int j = 0; j < length; j++)
{
if (alphabets[j] == text[i] || toupper(alphabets[j]) == text[i])
{
m++;
}
}
if (m == 0)
{
length--;
}
m = 0;
}
printf ("%i letter(s) \n", length);
}
你应该使用isalpha
那么你可以简单地做:
int main (void)
{
string text = get_string("Text: ");
size_t length = strlen(text);
int n = 0;
for (size_t i = 0; i < length; ++i)
{
if (isalpha(text[i])) ++n;
}
printf ("%i letter(s) \n", n);
}
嵌套的 for 循环与变量 length
一起在这个调用中使用
printf ("%i letter(s) \n", length);
没有意义。
还有这个变量
int n = 0;
未使用。
并且调用标准函数strlen
效率低下。
您只需要一个 for 循环,您将在其中检查给定字符是否代表一个字母。
注意头文件<ctype.h>
中声明了标准C函数isalpha
判断一个字符是否为字母
程序可以这样看
#include <stdio.h>
#include <ctype.h>
#include <cs50.h>
int main( void )
{
string text = get_string( "Text: " );
size_t n = 0;
for ( string current = text; *current != '[=12=]'; ++current )
{
if ( isalpha( ( unsigned char )*current ) ) ++n;
}
printf( "%zu letter(s)\n", n );
}
任务:创建一个 C 代码,从用户那里获取一些文本输入并打印出其中的字母数。字母可以是任何大写或小写字母字符,但不应包含任何标点符号、数字或其他符号。
- 我写了这段代码,但它打印了错误的输出(例如,如果输入是“Ad”,输出是“1 个字母”!)而且我找不到其中的错误! 谢谢!
#include <stdio.h>
#include <ctype.h>
#include <cs50.h>
#include <string.h>
int main (void)
{
char alphabets[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
string text = get_string("Text: ");
int length = strlen(text);
int n = 0;
for (int i = 0; i < length; i++)
{
for (int j = 0; j < length; j++)
{
if (alphabets[j] == text[i] || toupper(alphabets[j]) == text[i])
{
m++;
}
}
if (m == 0)
{
length--;
}
m = 0;
}
printf ("%i letter(s) \n", length);
}
你应该使用isalpha
那么你可以简单地做:
int main (void)
{
string text = get_string("Text: ");
size_t length = strlen(text);
int n = 0;
for (size_t i = 0; i < length; ++i)
{
if (isalpha(text[i])) ++n;
}
printf ("%i letter(s) \n", n);
}
嵌套的 for 循环与变量 length
一起在这个调用中使用
printf ("%i letter(s) \n", length);
没有意义。
还有这个变量
int n = 0;
未使用。
并且调用标准函数strlen
效率低下。
您只需要一个 for 循环,您将在其中检查给定字符是否代表一个字母。
注意头文件<ctype.h>
中声明了标准C函数isalpha
判断一个字符是否为字母
程序可以这样看
#include <stdio.h>
#include <ctype.h>
#include <cs50.h>
int main( void )
{
string text = get_string( "Text: " );
size_t n = 0;
for ( string current = text; *current != '[=12=]'; ++current )
{
if ( isalpha( ( unsigned char )*current ) ) ++n;
}
printf( "%zu letter(s)\n", n );
}