计算字符串中除空格外的所有字符
Count all characters in a string but spaces
到目前为止,在我的 C 代码中,它计算用户给定字符串中的所有内容,但是,我只希望它计算字母。
每当我尝试取出或更改空格计数器时,我的代码最终都会崩溃并迫使我手动停止它。
我想稍后使用空格作为计算单词的方法,但我宁愿尝试先完成字母。
我所说的中断是指代码将继续无限地无所事事。当我没有放下东西而是打印它时,我发现了这一点,它不停地重复给出的内容。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
string s = get_string("Text: ");
int n = 0;
while (s[n] != '[=10=]')
{
if (isalpha(s[n])) //counts letters
{
n++;
}
else
{
}
}
我想尝试保持代码相似,但如果它更简单,则采用不同的方式。
另外,我想将其保留在能够处理用户提供的字符串的位置。
如果仔细观察周期:
while (s[n] != '[=10=]')
{
if (isalpha(s[n])) //counts letters
{
n++;
}
}
您会注意到,当 s[n]
不是 alpha 时,n
不会递增,因此您陷入了无限循环。
计数器和迭代器应该是不同的变量:
int count = 0;
//...
while (s[n] != '[=11=]')
{
if (isalpha(s[n]))
{
count++; //counts letters
}
n++; //increment iterator
}
由于 else 语句,一旦遇到非字母字符,就会出现无限循环
int n = 0;
while (s[n] != '[=10=]')
{
if (isalpha(s[n])) //counts letters
{
n++;
}
else
{
}
}
你必须使用两个变量。第一个是存储字母个数,第二个是遍历一个字符数组
在这种情况下,最好使用 for 循环而不是 while 循环。
例如
size_t n = 0;
for ( size_t i = 0; s[i] != '[=11=]'; i++ )
{
if ( isalpha( ( unsigned char )s[i] ) ) //counts letters
{
n++;
}
}
注意将变量n
声明为有符号整数类型int
是没有意义的。最好将其声明为无符号整数类型size_t
。它是例如字符串函数 strlen
所具有的类型。
到目前为止,在我的 C 代码中,它计算用户给定字符串中的所有内容,但是,我只希望它计算字母。
每当我尝试取出或更改空格计数器时,我的代码最终都会崩溃并迫使我手动停止它。
我想稍后使用空格作为计算单词的方法,但我宁愿尝试先完成字母。
我所说的中断是指代码将继续无限地无所事事。当我没有放下东西而是打印它时,我发现了这一点,它不停地重复给出的内容。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
string s = get_string("Text: ");
int n = 0;
while (s[n] != '[=10=]')
{
if (isalpha(s[n])) //counts letters
{
n++;
}
else
{
}
}
我想尝试保持代码相似,但如果它更简单,则采用不同的方式。
另外,我想将其保留在能够处理用户提供的字符串的位置。
如果仔细观察周期:
while (s[n] != '[=10=]')
{
if (isalpha(s[n])) //counts letters
{
n++;
}
}
您会注意到,当 s[n]
不是 alpha 时,n
不会递增,因此您陷入了无限循环。
计数器和迭代器应该是不同的变量:
int count = 0;
//...
while (s[n] != '[=11=]')
{
if (isalpha(s[n]))
{
count++; //counts letters
}
n++; //increment iterator
}
由于 else 语句,一旦遇到非字母字符,就会出现无限循环
int n = 0;
while (s[n] != '[=10=]')
{
if (isalpha(s[n])) //counts letters
{
n++;
}
else
{
}
}
你必须使用两个变量。第一个是存储字母个数,第二个是遍历一个字符数组
在这种情况下,最好使用 for 循环而不是 while 循环。
例如
size_t n = 0;
for ( size_t i = 0; s[i] != '[=11=]'; i++ )
{
if ( isalpha( ( unsigned char )s[i] ) ) //counts letters
{
n++;
}
}
注意将变量n
声明为有符号整数类型int
是没有意义的。最好将其声明为无符号整数类型size_t
。它是例如字符串函数 strlen
所具有的类型。