找单词数
从键盘输入一行字符(长度小于1000),统计其中单词的个数,各单词以空格分隔,且空格数可以是多个。#include<stdio.h>
#include<string.h>
int main()
{
char str1;
fgets(str1,100,stdin);
int n=strlen(str1);
int i,s=0;
if((str1>='a'&&str1<='z')||(str1>='A'&&str1<='Z'))
{
s++;
}
for(i=1;i<n;i++)
{
if((str1>='a'&&str1<='z')||(str1>='A'&&str1<='Z'))
{
s=s;
}
else
{
if(str1==' ')
{
if(str1==' ')
{
s++;
}
}
}
}
printf("%d",s+1);
return 0;
}
有多种方法可以统计一行字符中的单词个数。下面是一种简单的实现方式:
#include <stdio.h>
#include <string.h>
int main() {
char str;
fgets(str, 1000, stdin);
int wordCount = 0;
int isWord = 0; // 标记当前是否在一个单词中
for (int i = 0; i < strlen(str); i++) {
// 如果当前字符是字母或数字,且前一个字符不是字母或数字,则认为进入了一个新的单词
if ((str >= 'a' && str <= 'z' || str >= 'A' && str <= 'Z' || str >= '0' && str <= '9') && !(str >= 'a' && str <= 'z' || str >= 'A' && str <= 'Z' || str >= '0' && str <= '9')) {
isWord = 1;
wordCount++;
}
}
printf("单词个数:%d\n", wordCount);
return 0;
}
这段代码通过遍历输入字符串中的每一个字符,当遇到字母或数字时,并且它的前一个字符不是字母或数字时,就认为进入了一个新的单词。通过这种方式逐个统计单词个数。
需要注意的是,在C语言中,字符数组需要提前分配内存空间,所以我们声明了一个长度为1000的字符数组str来存储输入字符。
另外,注意fgets()函数会在读取到换行符时结束读取,如果用户输入行字符的长度超过了999个字符,可能需要进行额外处理。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-11-26 17:08
有多种方法可以统计一行字符中的单词个数。下面是一种简单的实现方式:
只有英文和空格,找单词哪里不对
#include<stdio.h>
#include<string.h>
int main()
{
char str1;
fgets(str1,100,stdin);
int n=strlen(str1);
int i,s=0;
if((str1>='a'&&str1<='z')||(str1>='A'&&str1<='Z'))
{
s++;
}
for(i=1;i<n;i++)
{
if(((str1>='a'&&str1<='z')||(str1>='A'&&str1<='Z'))&&!(((str1>='a'&&str1<='z')||(str1>='A'&&str1<='Z'))))
{
s++;
}
}
printf("%d",s);
return 0;
}
yueyufeng 发表于 2023-11-26 17:19
只有英文和空格,找单词哪里不对
#include
#include ...
您的代码在判断字符是否为字母和空格上有一些问题,并且缺少对单词个数的统计。
下面是修正后的代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char str;
fgets(str, 1000, stdin);
int wordCount = 0;
int inWord = 0; // 标记当前是否在一个单词中
for (int i = 0; i < strlen(str); i++) {
// 如果当前字符是字母,则认为进入了一个新的单词
if (isalpha(str)) {
if (!inWord) {
inWord = 1;
wordCount++;
}
} else {
inWord = 0;
}
}
printf("单词个数:%d\n", wordCount);
return 0;
}
这段代码会从键盘输入一行字符串,然后通过遍历字符串的每个字符,判断是否为字母。如果当前字符是字母且前一个字符不是字母,则认为进入了一个新的单词,将单词个数加1。最后输出统计出的单词个数。
注意,在使用该代码时,您需要使用英文和空格作为输入,否则结果可能不准确。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-11-26 17:19
您的代码在判断字符是否为字母和空格上有一些问题,并且缺少对单词个数的统计。
下面是修正后的代码:
#include<stdio.h>
#include<string.h>
int main()
{
char str1;
fgets(str1,1000,stdin);
int n=strlen(str1);
int i,s=0,Word=0;
for(i=0;i<n;i++)
{
if(((str1>='a'&&str1<='z')||(str1>='A'&&str1<='Z')||(str1 >= '0' && str1 <= '9')))
{
if (!Word)
{
Word = 1;
s++;
}
} else {
Word = 0;
}
}
printf("%d",s);
return 0;
}
哪里不对 yueyufeng 发表于 2023-11-26 17:31
#include
#include
int main()
{
char str1;
...
您的代码中有一些语法错误和逻辑问题。下面是修正后的代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char str1;
fgets(str1, 1000, stdin);
int n = strlen(str1);
int wordCount = 0;
int inWord = 0;
for (int i = 0; i < n; i++) {
if (isalpha(str1)) { // 判断当前字符是否为字母
if (!inWord) {
inWord = 1;
wordCount++;
}
} else {
inWord = 0;
}
}
printf("单词个数:%d\n", wordCount);
return 0;
}
修正后的代码使用一个布尔变量`inWord`来标记是否正在统计一个单词,在遍历字符串的每个字符时,如果当前字符是字母且上一个字符不是字母,则认为进入了一个新的单词,将单词个数加1。最后输出统计结果。
需要注意的是,输入的字符串长度不能超过数组的大小,这里假设字符串长度不会超过1000。另外,该方法只适用于英文和空格的情况。如果要处理其他语言或特殊字符,可能需要采用其他的方法。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页:
[1]