输入一个字符串,统计其中单词的个数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入一个字符串,统计其中单词的个数相关的知识,希望对你有一定的参考价值。

示例
How are you?
单词数:3
注意啊,如果单词间空2个空格或更多呢 下面2个都不对啊

参考技术A #include<conio.h>
#include<stdio.h>
void despace(char *s,int *i)

while(s[*i]==' ') (*i)++;


int main()

int count=0,i=0;
char s[50];
char c;

gets(s);
while((c=s[i])!='\0')

if(c==' ')

despace(s,&i);
count++;

i++;

count++;
printf("\ncount:%d",count);
getch();
return 1;


第二种方法:
#include <stdio.h>
int main( )

int ri, repeat;
int count, word;
char c;
scanf("%d", &repeat);
getchar();
for(ri=1; ri<=repeat; ri++)
c = getchar();
word=1;
count=0;
while(c!='\n')
if(c==' ') /*此处if和else if用得相当巧妙,保证c由空格变为单词时计数*/
word=1;
else if(word) /*当c不为空格时才根据word判断是否计数,否则不跳过下面的判断*/
count++;
word=0;

c=getchar();

printf("%d\n", count);

参考技术B #include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
int i,j,len,ans=0;
gets(s);len=strlen(s);
i=0;
while (i<len)
if(!isalpha(s[i])) ans++;//isalpha(char c)函数用来判断c是否为字母,包含于ctype.h头文件中
i++;

printf("%d\n",ans);
return 0;
参考技术C #include <stdio.h>

int main()

char cur, pre;
int word_num = 1;

/* 跳过前面的空格 */
while ((cur = getchar()) == ' ') continue;
while (cur != '\n')

if (cur == ' ' && pre != ' ') // 单词之间的空格
word_num++;
pre = cur;
cur = getchar();


printf("word_num = %d\n", word_num);
getchar();
return 0;

参考资料:http://hi.baidu.com/onlys%5Fc/blog/item/2ee0f8d35cd864043bf3cf71.html

参考技术D 经过验证合格

输入 How are you?
输出 3

输入 How are you? (多个空格)
输出 3

输入 123 123 12 45 .dff wer, fjf? sdf
输出 8

#include <iostream>
#include <stdio.h>

using namespace std;

int main()

char s;
int numWords = 0;
s=getchar();
while(s!='\n')
if(!isspace(s))
numWords++;
while(!isspace(s)&&s!='\n') s=getchar();


else
s=getchar();


cout<<numWords<<std::endl;
第5个回答  2010-05-09 #include<stdio.h>
void main()

char ch;
int num=1;
do

ch=getchar();
if(ch==32)num++;

while(ch!='\n');
printf("单词数: %d\n",num);

词频统计(30 分)

请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。

所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。

输入格式:

输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。

输出格式:

在第一行中输出文本中所有不同单词的个数。注意“单词”不区分英文大小写,例如“PAT”和“pat”被认为是同一个单词。

随后按照词频递减的顺序,按照词频:单词的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。

输入样例:

This is a test.

The word "this" is the word with the highest frequency.

Longlonglonglongword should be cut off, so is considered as the same as longlonglonglonee.  But this_8 is different than this, and this, and this...#
this line should be ignored.

输出样例:(注意:虽然单词the也出现了4次,但因为我们只要输出前10%(即23个单词中的前2个)单词,而按照字母序,the排第3位,所以不输出。)

23
5:this
4:is


map映射到数组,统计并排序。
#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
using namespace std;
struct str
{
    char s[16];
    int num;
}ans[10000];
int no = 1;
bool cmp(str a,str b)
{
    if(a.num == b.num)return strcmp(a.s,b.s) < 0;
    return a.num > b.num;
}
int main()
{
    char ch,s[16];
    int c = 0;
    map<string,int> p;
    while((ch = cin.get()) != #)
    {
        if(ch == _)
        {
            if(c < 15)s[c ++] = ch;
        }
        else if(isdigit(ch))
        {
            if(c < 15)s[c ++] = ch;
        }
        else if(isalpha(ch))
        {
            if(c < 15)s[c ++] = tolower(ch);
        }
        else
        {
            if(c)
            {
                s[c] = \0;
                c = 0;
                if(!p[s])
                {
                    strcpy(ans[no].s,s);
                    ans[no].num = 1;
                    p[s] = no ++;
                }
                else
                {
                    ans[p[s]].num ++;
                }
            }
        }
    }
    sort(ans + 1,ans + no,cmp);
    cout<<no - 1<<endl;
    for(int i = 1;i <= no / 10;i ++)
    {
        cout<<ans[i].num<<:<<ans[i].s<<endl;
    }
}

 

以上是关于输入一个字符串,统计其中单词的个数的主要内容,如果未能解决你的问题,请参考以下文章

c语言:输入一行字符,统计其中的单词个数,单词之间用空格分开

C语言:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开

C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开

C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开

C语言:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开

编写程序,输入字符串(包含空格),统计其中单词的个数,单词之间以一个或多个空格分隔。