输入一行字符串,统计其中有多少个单词,单词之间用空格(' ’)隔开。例: 字符串:I am a boy,得到结果是4个单词。要求: (1) 将求一行字符串有多少个单词写成函数。例如: int WordNum(char *s)//输入参数char *s是字符串指针,输出参数是单词个数; (2) 写出main调用过程,测试函数的结果; (3) 程序书写规范,关键部分要求给出注释。

题目

输入一行字符串,统计其中有多少个单词,单词之间用空格(' ’)隔开。例: 字符串:I am a boy,得到结果是4个单词。要求: (1) 将求一行字符串有多少个单词写成函数。例如: int WordNum(char *s)//输入参数char *s是字符串指针,输出参数是单词个数; (2) 写出main调用过程,测试函数的结果; (3) 程序书写规范,关键部分要求给出注释。


相似考题
参考答案和解析
#include <stdio.h> void main() { char ch; int n=0; printf(“请输入一行字符:”); scanf(“%c”,&ch); while(ch!=’\n’) { if(ch>=’a’&&ch<=’z’||ch>=’A’&&ch<=’Z’) n++; scanf(“%c”,&ch); } printf(“您输入了%d个英文字母\n”, n); }
更多“输入一行字符串,统计其中有多少个单词,单词之间用空格(' ’)隔开。例: 字符串:I am a boy,得到结果是4个单词。要求: (1) 将求一行字符串有多少个单词写成函数。例如: int WordNum(char *s)//输入参数char *s是字符串指针,输出参数是单词个数; (2) 写出main调用过程,测试函数的结果; (3) 程序书写规范,关键部分要求给出注释。”相关问题
  • 第1题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    [说明]

    本程序实现对指定文件内的单词进行计数。其中使用二叉树结构来保存已经读入的不同单词,并对相同单词出现的次数进行计数。此二叉树的左孩子结点的字符串值小于父结点的字符串值,右孩子结点的字符串值大于父结点的字符串值。函数getword(char*filename,char*word)是从指定的文件中得到单词。char*strdup(char*S)是复制S所指向的字符串,并返回复制字符串的地址。

    [C程序]

    include <stdio.h>

    include <ctype.h>

    include <string.h>

    define MAXWORD 100

    struct node {

    char*word;

    int count;

    struct node*left;

    struct node*right;

    }

    struct node*addtree(struct node*P,char*w)

    { int cond;

    if(p==NULL){ /*向树中插入结点*/

    P=(struct node*)malloc(sizeof(struct node));

    P->word=strdup(w);

    P->count=1;

    (1) ;

    }

    elseif((oond=strcmp(w,p->word))==0) (2) ;

    else if(cond<0)p->left=(3);

    else p->right=(4);

    return p;

    }

    main()

    { Struct node*root;

    char word[MAXWORD];

    root=NULL;

    filename="example.dat";

    while(getword(filename,word)!=EOF))

    root=(5);

    }


    正确答案:(1) p->left=p->right=NULL (2) p->count++ (3) addtree(p->leftw) (4) addtree(p->rightw) (5) addtree(rootword)
    (1) p->left=p->right=NULL (2) p->count++ (3) addtree(p->left,w) (4) addtree(p->right,w) (5) addtree(root,word) 解析:在用二叉树结构来保存指定文件内的单词时,采用递归调用。首先在树中创建一个结点,因此空(1)填“p->left=p->right=NULL”。如果要插入的字符串已经存在,则计数值加1,即空(2)填“p->count++”;如果要插入的字符串小于此结点上字符串的值,则再次调用此函数,即空(3)填“addtree(p->left,w)”;如果要插入的字符串大于此结点上字符串的值,则再次调用函数为空(4),即“addtree(p->right,w)”。在主函数中调用空(5),即“addtree(root,word)”。

  • 第2题:

    下列程序的功能是:求出ss所指字符串中指定字符的个数,并返回此值。

    例如,若输入字符串123412132,输入字符1,则输出3,请填空。

    #include

    #include

    #define M 81

    int fun(char *ss, char c)

    { int i=0;

    for(; ( );ss++)

    if(*ss==c)i++;

    return i;}

    main()

    { char a[M], ch;

    clrscr();

    printf("\nPlease enter a string: "); gets(a);

    printf("\nPlease enter a char: "); ch=getchar();

    printf("\nThe number of the char is: %d\n", fun(a,ch));}


    正确答案:
    *ss!= '\0'

  • 第3题:

    请补充函数fun(),该函数的功能是:把字符串str中的字符按字符的ASCⅡ码降序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传入。

    例如,如果输入“cdefgh”,则输出为“hgfedc”。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include <stdio.h>

    define N 80

    void fun (char s [], int n)

    {

    int i, j;

    char ch;

    for (i=0; i<n; i++)

    for(j=【 】;j<n;j++)

    if (s[i]<s [j])

    {

    ch=s [j];

    【 】;

    s [i] =ch;

    }

    main ( )

    {

    int i=0, strlen=0;

    char str [N];

    clrscr ();

    printf ("\nInput a string: \n");

    gets (str);

    while (str [i] !=' \0')

    {

    strlen++;

    i++;

    }

    fun (str, strlen);

    printf ("\n***display string ***\n");

    puts (str);

    }


    正确答案:I s[j]=s[i]
    I s[j]=s[i] 解析:第一空:本题采用选择法进行排序。选择法的算法思路是:如果有n个数则从头到倒数的第2个数一个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按题目要求的顺序将进行比较的这两个数排序 (即交换)。理解了选择法的思路,则此空就非常简单了,应该填i。第二空:借助第三个变量交换两数的方法,非常重要也非常基础,必须要求掌握。

  • 第4题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【说明】

    给定函数fun的功能是:将从键盘上输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。

    【函数】

    int fun(char *c,int status)

    {

    if((1)=='')

    return 1;

    else

    {

    if((2)&&(3)&&(4))

    (5)='A'-'a';

    return 0;

    }

    }

    main()

    {

    int flag=1;

    char ch;

    printf("请输入一字符串,用点号结束输入!\n");

    do {

    ch=getchar();

    flag=fun(&ch,flag);

    putchar(ch);

    }while(ch!='.');

    printf("\n");

    }


    正确答案:(1)*c (2)status (3)*c='z' (4)*c>='a' (5)*c+
    (1)*c (2)status (3)*c='z' (4)*c>='a' (5)*c+ 解析:本题考查在C语言中对字符串的处理。
    题目要求程序将从键盘上输入的每个单词的第一个字母转换为大写字母,而输入的各单词必须用空格隔开,用“.”结束输入。要实现这个功能,关键之一在于如何取出单词中的第一个字母,关键之二是如何实现大小写字母的转换。
    第(1)空是一个条件判断语句的条件,如果条件成立,则返回1,而从程序中可以看出,此条件判断语句是判断当前取到的字符是否等于空格字符。从主函数中可以看到,每次在调用功能函数fun()前都从输入的字符串中取出一个字符,并存放在变量ch中,而在调用函数时是将变量ch的地址传递给了指针变量c,因此此空的答案为*c。
    第(2)空、第(3)空和第(4)空应该结合起来看,它们都是条件判断语句的条件,这个条件判断语句下面的程序是将一个小写字母改变成一个大写字母,根据题目要求,此条件判断语句的条件应该是判断当前取到的字母是一个单词的第一个字母且是一个小写字母,再结合主函数来看,我们不难发现单词的第一个字母用一个标记变量flag标识,如果是第一个字母,这个标记变量flag的值为1,否则为0。要判断一个字母是否是小写字母,应该判断其ASCⅡ码值是否在a与z的ASCⅡ码值之间。所以这3个空的答案应该分别为status、*c='z'、*c>='a'。
    第(5)空是在上面条件成立的情况下执行的一条语句,条件成立我们在上面已经分析过了,表明当前取到的字符是一个单词的第一个字母且是小写字母,此空所在语句的任务是将小写字母变成大写字母,根据上面的分析,因此可以得到此空答案为*c+。

  • 第5题:

    下列程序的功能是:求出ss字符串中指定字符c的个数,并返回此值。请编写函数int num(*char ss,char c)以实现程序要求,最后调用函数readwriteDat(),把结果输出到文件out.dat中(注:大小写字母有区别)。例如:若输入字符串“ss="123412132" , c=’1’”,则输出“3”。部分源程序已给出。请勿改动主函数main()和输出数据函数writeDat()的内容。#include <conio.h>#include <stdio.h>#define M 81void readwriteDAT(); int num(char *ss,char c){ } main(){ char a[M],ch; clrscr(); printf("\nPlease enter a string:" );gets(a); printf("\nPlease enter a char;" );ch=getchar(); printf("\nThe number of the char is:%d\n" ,num(a,ch)); readwriteDAT();}viod readwriteDAT(){ int i; FILE *rf,*wf; char a[M],b[M],ch; rf=fopen("in.dat" ,"r" ); wf=fopen(" out.dat" ,"w" ); for(i=0;i<10;i++){ fscanf(rf," %s",a); fscanf(rf," %s" ,b); ch=*b; fprintf(wf," %c=%d\n:" ,ch,num(a,ch));} fclose(rf); fclose(wf);}


    正确答案:请参考解析
    【解析及答案】
    本题的任务是把单词统计函数num(char *ss,char c) 补充完整,其中,ss是需统计的字符串,c是待统计的字符。
    本题属于单个字符串统计问题,处理过程相对简单一些。首先,把计数器清零。然后,一边扫描字符串ss,一边统计字符c出现的次数,如果字符c出现1次,那么计数器的值自动增加1。最后,计数器的值就是字符c在字符串ss中出现的总次数。求解核心是字符c的匹配和计数器的计数。综上所述,完整的统计函数num(char *ss,char c) 如下。
     int num(char *ss,char c)
    {
      int i=0;
      while(*ss!=0)
      if(*ss++==c) i++;
      return i;
    }

  • 第6题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【函数1说明】

    函数palindrome(char s[])的功能是:判断字符串s是否为回文字符串。若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,则可称该字符串是回文字符串。例如,“LEVEL”是回文字符串,而“LEVAL”不是。

    【函数1】

    int palindrome(char s[]{

    char *pi, *pj;

    pi=s; pj=s+strlen(s)-1;

    while(pi<pj&&(1)){

    pi++; pj--;

    }

    if((2))return-1;

    else return 0;

    }

    【函数2说明】

    函数f(char *str, char del)的功能是:将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。

    例如,若str的值为“33123333435”,del的值为“3”,调用此函数后,将输出三个子字符串,分别为“12”、“4”和“5”。

    【函数2】

    void f(char *str, char del){

    int i,j, len;

    len=strlen(str);

    i=0;

    while(i<len){

    While((3)) i++; /*忽略连续的标志字符*/

    /*寻找从str[i]开始直到标志字符出现的一个子字符串*/

    j=i+1;

    while(str[j]!=del && str[j]!='\0')j++;

    (4)='\0'; /*给找到的字符序列置字符串结束标志*/

    printf("%s\t",&str[i]);

    (5);

    }

    }


    正确答案:(1)*pi==*pi (2)pipj或*pi!=*pj (3)str[i]==del (4)str[j] (5)i=j+1
    (1)*pi==*pi (2)pipj或*pi!=*pj (3)str[i]==del (4)str[j] (5)i=j+1 解析:本题考查在C语言中对字符串的处理。
    【函数1】
    使用数组s[n]来存储一个字符串,因为要根据回文字符串的定义来判断一个串是否是回文字符串,所以需要循环比较。
    (1)拿该字符串的第一个元素s[0]和最后一个元素s[n-1]比较,如果s[0]不等于s[n-1],则s不是回文字符串。
    (2)如果s[0]等于s[n-1],则拿第二个元素s[1]和倒数第二个元素s[n-2]比较,如果 s[1]不等于s[n-2],则s不是回文字符串。
    (3)依次类推,直到最中间的两个元素也比较完毕(如果s有偶数个元素),或者只剩下中间的一个元素(如果s有奇数个元素)。
    当上述循环结束时,如果最中间的元素没有进行比较,就说明s不是回文字符串;如果进行了比较,则s是回文字符串。
    在函数1中,pi和pj是两个指向字符的指针,程序首先将s的首地址赋给pi(即*pi =a[0]),将元素s[strlen(s)-1]的地址赋给pj(即*pj=s[strlen(s)-1]),当pipj并且pi和pj所指向的值相等时进行循环:pi自增,pj自减。
    退出循环后,如果pipj,则s是回文字符串(如果s有偶数个元素,则为pi>pj;如果s有奇数个元素,则为pi=pj);如果pipj,则s不是回文字符串。
    【函数2】
    由函数2说明可知,此函数对给定的字符串进行从左至右的扫描,找出不包含标志字符的子字符串。
    在函数2中,i的初值为0,len表示字符串的长度。当ilen时进行循环:如果当前字符是标志字符,则不作处理,继续扫描。当退出该循环时,当前字符str[i]不是标志字符,这时从str[i]开始寻找,直到找到在标志字符中出现的一个子字符串(i保持不变,用i标记寻找的过程),给找到的字符序列置字符串结束标志,以便于后面语句的输出。
    输出语句结束后,就要继续寻找后面的不包含标志字符的子字符串,这时,需要把指针i移动至j的后面,继续扫描。

  • 第7题:

    请补充函数fun(),该函数的功能是:把ASCⅡ码为偶数的字符从字符串s打中删除,结果仍然保存在字符串srt中,字符串str从键盘输入,其长度作为参数传入函数fun()。

    例如,输入“abcdef”,输出“ace”。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    inc lude< stdio, h>

    define N 80

    【 】

    {

    int i, j;

    【 】

    for (i=0;i<n;i++)

    {

    if (s [i] %2!=0)

    s [j++]=s [i];

    }

    【 】;

    }

    main ( )

    {

    int i=0, strlen=0;

    char str[N];

    clrscr ();

    printf ("\nInput a string:\n");

    gets (str);

    while (str [i] !=' \0' )

    {

    strlen++;

    i++;

    }

    fun (str, strlen);

    printf("\n*** display string ***\n");

    puts (str);

    }


    正确答案:void fun(char s[]int n) j=0 s[j]='\0'
    void fun(char s[],int n) j=0 s[j]='\0' 解析:第一空:由主函数main()调用fun()函数的格式可以知道,fun()函数没有返回值,第二个参数是字符数组,第二个参数是整型变量。第二空:变量j声明时没有初始化,所以在使用j之前要将它初始化为0。第三空:当把所有ASCⅡ码为偶数的字符都存入字符串s中后,要在最后加上‘\0’,表示字符串的结束。

  • 第8题:

    下列给定的程序中,fun()函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写(这里的“单词”是指有空格隔开的字符串)。例如,若输入:

    I am a student to take the examination

    则应输出:I aM A studenT tO take thE examinatioN

    请改正程序中的错误,使它能得出正确的结果。

    注童:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include <conio.h>

    include <ctype.h>

    include <stdio.h>

    void fun(char *p)

    {

    int k=0;

    for ( ; *p;p++)

    if (k)

    {

    /*************found**************/

    if (p=='')

    {

    k=0;

    /*************found**************/

    *p=toupper(*(p-1));

    }

    }

    else

    k=1;

    }

    main()

    {char chrstr[64];

    int d;

    clrscr();

    printf("\nPlease enter an English sentence within 63 letters:");

    gets(chrstr);

    d=strlen(chrstr);

    chrstr[d==' ';

    chrstr[d+1]=0;

    printf("\nBofore changing:\n %s",chrstr);

    fun(chrstr);

    printf("\nAfter changing:\n%s",chrstr);

    }


    正确答案:(1)错误:if(p=='') 正确:if(*p=='') (2)错误:*p=toupper(*(p-1)); 正确:*(p-1)=toupper(*(p-1));
    (1)错误:if(p=='') 正确:if(*p=='') (2)错误:*p=toupper(*(p-1)); 正确:*(p-1)=toupper(*(p-1)); 解析:本题比较简单,重点考查toupper函数的用法,该函数是将ch字符转换成大写字母,该题较多地应用了字符串处理函数。

  • 第9题:

    以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。 #include<string> char*scmp(char*s1,char*s2) { if(strcmp(s1,s2)<0) return(s1); else retrun(s2); } main() { int i;char string[20],str[3][20]; for(i=0;i<3;i+

    A.abcd

    B.abba

    C.abc

    D.abca


    正确答案:B

  • 第10题:

    下列给定的程序中,proc()函数的功能是:将str所指字符串中每个单词的最后一个字母改成大写(这里的“单词”是指有空格隔开的字符串)。

    例如,若输人:How do you do,则输出:HoW dOyoU d0。

    请修改程序中的错误,使它能得出正确的结果。

    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

    试题程序:


    正确答案:


  • 第11题:

    试题三(共15分)

    阅读以下说明和C函数,填补C函数中的空缺(1)~(6),将解答写在答题纸的对应栏内。

    【说明】

    函数numberOfwords (char message[])的功能是计算存储在message字符数组中的一段英文语句中的单词数目,输出每个单词(单词长度超过20时仅输出其前20个字母),并计算每个英文字母出现的次数(即频数),字母计数时不区分大小写。

    假设英文语句中的单词合乎规范(此处不考虑单词的正确性),单词不缩写或省略,即不会出现类似don't形式的词,单词之后都为空格或标点符号。

    函数中判定单词的规则是:

    (1)一个英文字母串是单词;

    (2) 一个数字串是单词;

    (3)表示名词所有格的撇号(')与对应的单词看作是一个单词。

    除上述规则外,其他情况概不考虑。

    例如,句子“The 1990's witnessed many changes in people's concepts ofconservation”中有10个单词,输出如下:

    The

    1990's

    witnessed

    many

    changes

    in

    people's

    concepts

    of

    conservation

    函数numberOfijvords中用到的部分标淮库函数如下所述。

    【C函数】

    int numberOfwords (char message[])

    {

    char wordbuffer[21],i=0; /*i用作wordbuffer的下标*/

    (1) pstr;

    int ps[26]={0); /*ps[0]用于表示字母'A'或'a'的频数*/

    /*ps[1]用于表示字母'B'或'b'的频数,依此类推*/

    int wordcounter=0;

    pstr=message;

    while (*pstr){

    if((2)(*pstr)){/*调用函数判断是否为一个单词的开头字符*/

    i=0;

    do{/*将一个单词的字符逐个存入wordbuffer[],并对字母计数*/

    wordbuffer[i++]=*pstr;

    if(isalpha(*pstr)){

    if (3) (*pstr))ps[*pstr-'a']++;

    else ps[*pstr-'A']++;

    }

    (4) ; /*pstr指向下一字符*/

    }while (i<20&&(isalnum(*pstr)||*pstr=='\"));

    if (i>=20) /*处理超长单词(含名词所有格形式)*/

    while (isalnum(*pstr)||*pstr=='\"){pstr++;}

    (5) ='\0';/*设置暂存在wordbuffepstrr中的单词结尾*/

    wordcounter++; /*单词计数*/

    puts(wordbuffer); /*输出单词*/

    }

    (6); /*pstr指向下一字符*/

    }

    retum wordcounter;

    }


    正确答案:
    (1)char*,或unsigned char*
    (2)isalnum,或isalpha(*pstr)||isdigit
    (3)islower,或!isupper
    (4)pstr++,或++pstr,或pstr=pstr+1,或pstr+=1
    (5)wordbuffer[i],或*(wordbuffer+i)
    (6)pstr++,或++pstr,或pstr=pstr+1,或pstr+=1

  • 第12题:

    阅读以下说明和C代码,填写代码中的空(1)~(6),将解答写入答题纸的对应栏内。【说明】下面的C代码在输入的100个英文单词中找出最小单词和最大单词。约定每个单词是仅由英文字母构成的字符串,且都不超过20个字符。单词的大小按照字典序定义。例如,单词“entry”大于“enter”、“art”小于“ article”、“an”等于“An”。 【C代码】#include #define NUMBER 100int isValid(const char *s1); //若字符串s1仅包含英文字母则返回1,否则返回0char toLower(char ch); //将大写字母转换为小写字母int usr_strcmp(char *s1, char *s2); //比较字符串s1和s2,相等时返回0, //s1大则返回正整数,s1小则返回负整数void usr_strcpy(char *s1,const char *s2); //字符串s2拷贝给s1 int main(){ char word[32]; char maxWord[32]="", minWord[32] =""; int numWord=0; while(num Word0) / /调用usr_strcmp比较单词 usr_strcpy(max Word, word); / /用max Word记下最大单词 else if( (3) <0) / /调用usr_strcmp比较单词 usr_strcpy(min Word,word); / /用min Word记下最小单词 } } printf("max Word=%s min Word=%s\n",max Word,min Word); return 0;}int is Valid(const char *s){ for(; *s ; s++) if(!(*s>='a' && *s<='z') && !(*s>='A' && *s<='Z')) return 0; return 1; } char toLower(char ch){ //若ch为大写字母则返回其小写形式,否则直接返回原字符 if(ch>='A' && ch<='Z') ch= (4) +'a'; return ch;} int usr_strcmp(char *s1,char *s2){ //按字典序比较两个英文单词,若s1表示的单词大,则返回正整数, //若s1表示的单词小,则返回负整数;否则返回0 for(; (5) ;) { if(toLower(*s1)==toLower(*s2)) {s1++,s2++;} else break; } return(toLower(*s1) - toLower(*s2));} void usr_strcpy(char *s1,const char *s2){ //将s2表示的字符串复制给s1 for(; (6) ;) *s1++= *s2++; *s1='\0';}


    答案:
    解析:
    (1)word(2)usr_strcmp(word, maxWord)(3)usr_strcmp(word, minWord)(4)ch-‘A’(5)*s1!=’\0’&&*s2!=’\0’或*s1||*s2等价表示(6)*s2!=’\0’或*s2等价表示
    【解析】

    (1)scanf函数是将输入的数据赋值给相应的变量,在格式字符串后需要取变量地址,即将数据赋值给相应地址的变量,word是数组名,因此可以直接作为地址。(2)调用usr_strcmp比较单词,当usr_strcmp返回的值为正整数时,调用usr_strcpy将word值赋值给maxWord,因此此处是比较word和maxWord,即usr_strcmp(word, maxWord)(3)调用usr_strcmp比较单词,当usr_strcmp返回的值为负整数时,调用usr_strcpy将word值赋值给minWord,因此此处是比较word和minWord,即usr_strcmp(word, minWord)(4)toLower函数是将大写字母转换为小写字母,if函数是判断ch是否为大写字母,当ch为大写的时候,将ch转换为小写,小写是在’a’的基础上加上一个值得到,例如‘b’=1+’a’,这个值便是大写字母和‘A’之间的差值,即例子中1为’B’-‘A’,因此此处填写ch-‘A’(5)usr_strcmp是比较两个英文单词,是需要对s1和s2中的字符逐一比较,因此在for循环中进行比较,for循环的判断条件是s1和s2中的字符是否为’\0’,因此此处填写*s1!=’\0’&&*s2!=’\0’(6)usr_strcpy是将s2复制给s1,是需要将s2中的字符逐一赋值给s1,因此在for循环中进行赋值,for循环的判断条件是s2中的字符是否为’\0’,因此此处填写*s2!=’\0’

  • 第13题:

    请补充函数fun(),该函数的功能是:把ASCII码为奇数的字符从字符串str中删除,结果仍然保存在字符串str中。字符串str从键盘输入,其长度作为参数传入函数fun()。

    例如,输入“abcdef”,输出“bdf”。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include <stdio.h>

    define N 80

    void fun(char s[],int n)

    {

    int i, j;

    j=0;

    for(i=0;【 】;i++)

    {

    if(【 】)

    s [j++]-s [i];

    }

    【 】;

    }

    main ( )

    {

    int i=0, strlen=0;

    char str [N];

    clrscr ();

    printf ("\nInput a string: \n");

    gets (str);

    while (str [i] !='\0')

    {

    strlen++;

    i++;

    }

    fun(str, strlen);

    printf("\n*** display string ***\n");

    puts (str);

    }


    正确答案:in s[i]%2=0 s[j]= '\0'
    in s[i]%2=0 s[j]= '\0' 解析:第一空:变量n为字符串的长度,所以字符数组的下标的取值范甲是从0到n-1。第二空:如果当前字符的ASCII码对2取余等于0,就说明这个字符的ASCII码为偶数,故不能删除,而是将它存于字符串s中。第三空:通过保留ASCII码为偶数的字符的力法,来实现删除ASCII码为奇数的字符的目的。处理结束后,还要在字符串s的最后加上结束标记符'\0'。

  • 第14题:

    分析两个字符串,分别输出每个字符串的单词并统计出单词个数。阅读程序,填写空行。

    注意:不改动程序结构,不得增行或删行。

    import java.util.*;

    public class ex2

    {

    public static void main(String args[])

    {

    String s1="I am Chinese,she is my girlfriend";

    String s2="Oh,really,fine";

    StringTokenizer fenxi_1=new StringTokenizer(s1,",");

    StringTokenizer fenxi_2=new StringTokenizer(s2,",");

    int n1=fenxi_1.countTokens();

    int n2=fenxi_2.countTokens();

    while(fenxi_1.hasMoreTokens())

    {

    String s=fenxi_1.nextToken();

    System.out.println(s);

    }

    System.out.println("s1单词:"+n1+"个");

    while(fenxi_1.hasMoreTokens())

    {

    String s=______;

    System.out.println(s);

    }

    System.out.println("s2单词:"+n2+"个");

    }

    }


    正确答案:fenxi_2.nextToken()
    fenxi_2.nextToken() 解析:本题是考查处理字符串的考题,一般使用StringTokenizer类来分析字符串。 StringTokenizer(String s)尽为字符串s构造一个分析器。一个分析器可以使用nextToken()方法逐个获取字符串中语言符号,每当调用nextToken()时,都将在字符串中获得下一个语言符号。通常用while循环来逐个获取语言符号,为了控制循环,还可以使用StringTokenizer类中的 hasMoreTokens()方法,只要字符串还有语言符号,该方法就返回true,否则返回false。另外还可以调用countTokens()方法得到字符串一共有多少个语言符号。因此在本题目中的空白处应该填写fenxi_2.nextToken()。

  • 第15题:

    请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较K的字符串。若两个字符串长度相等,则返回第1个字符串。

    例如,输入beijing<CR>shanghai<CR>(<CR>为回车键),函数将返回shanghai。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<stdio.h>

    char *fun(char *s, char *t)

    {

    }

    main()

    {

    char a[20],b[10],*p,*q;

    int i;

    printf ("Input 1th string: ");

    gets(a);

    printf{"Input 2th string: ");

    gets(b);

    printf("%s",fun(a,b));

    }


    正确答案:char *fun(char *s char *t) { int ii; for(i=0;s[i]!= '\0';i++); /*求字符串的长度*/ for(j=0;t[i]!= '\0';j++); if(i>=j) /*比较两个字符串的长度*/ return s; /*函数返回较长的字符串若两个字符串长度相等则返回第1个字符串*/ else return t; }
    char *fun(char *s, char *t) { int i,i; for(i=0;s[i]!= '\0';i++); /*求字符串的长度*/ for(j=0;t[i]!= '\0';j++); if(i>=j) /*比较两个字符串的长度*/ return s; /*函数返回较长的字符串,若两个字符串长度相等,则返回第1个字符串*/ else return t; } 解析:本题中,第1个for循环的作用是求出s的字符个数i,第2个for循环的作用是求出t的字符个数j,因为任何循环都要控制一条语句,所以在每一个for循环条件后面必须要有一个分号。
    本题也可用如下技巧:
    char*fun(char*s,char*t)
    {if(strlen(s)>=strlen(t)return s;
    else return t;
    }

  • 第16题:

    以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址

    #include <stdio.h>

    #include <string.h>

    char *scmp(char *s1, char *s2)

    { if(strcmp(s1,s2)<0)

    return(s1);

    else return(s2);

    }

    main( )

    { int i; char string[20], str[3][20];

    for(i=0;i<3;i++) gets(str[i]);

    strcpy(string,scmp(str[0],str[1])); /*库函数strcpy对字符串进行复制*/

    strcpy(string,scmp(string,str[2]));

    printf("%s\n",string);

    }

    若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为

    A.abcd

    B.abba

    C.abc

    D.abca


    正确答案:B
    解析:当第一次执行strcpy()函数时,把输入的前两个串中的较小者复制到string中,第二次调用strcpy()函数时,则是把前两者中的较小者与第三个串进行比较返回较小者,并复制到string中,故string存放了3个输入串中的最小者。

  • 第17题:

    以下程序中函数scmp功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。#includ<string. h>char *scmp(char *s1,char *s2){ if(strcmp(s1,s2)<0) return(s1); else return(s2);}main(){ int i;char string[20],str[3][20]; for(i=0;i<3;i++) gets(str[i]); strcpy(string,scmp(str[0],str[1])); //库函数 strcpy 对字符串进行复制 strcpy(string,scmp(stfing,str[2])); puts(string); }若运行时依次输入: abed、abba 和abc三个字符串,则输出结果为( )。

    A.abed

    B.abba

    C.abc

    D.abca


    正确答案:B

  • 第18题:

    str是全部由小写字母字符和空格字符组成的字符串,由 num传入字符串的长度。请补充函数fun(),该函数的功能是:统计字符串str中的单词个数,结果由变量num传回。每个单词之间都由空格隔开,并且字符串str开始不存在空格。

    例如:str=“how do you do”,结果为:num=4。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include <stdio.h>

    define N 80

    void fun(char *s,int *num)

    {

    int i,n=0;

    for(i=0;【 】;i++)

    {

    if(s[i]>='a',&&s[i]<='z',&&(s[i+1)==’’||s[i+1]=='\0'))

    【 】;

    }

    【 】;

    }

    main()

    {

    char str[N];

    int num=0;

    printf("Enter a string:\n");

    gets(str);

    while(str[num])

    num++;

    fun(str,&num);

    printf("The number of word is:

    %d\n\n",num);


    正确答案:i*num n++ *num=n
    i*num n++ *num=n 解析:第一空:*num传入字符串的长度,所以for循环中变量i的变化范围是从0到*num-1。第二空:如果当前判断的字符是小写字母,并且它的下一个字符是空格或者是字符串结束标记符,则表示当前字符是一个单词的最后一个字母,统计单词数的变量n要加上1。第三空:题目要求结果由变量num传回,所以要将n的值赋给指针num所指的单元。

  • 第19题:

    请补充函数fun(),该函数的功能是:把字符下标能铍2或3整除的字符从字符串str中删除,把剩余的字符重新保存在字符串str中。字符串str从键盘输入,其长度作为参数传入函数fun()。

    例如,输入“abcdefghijk”,输出“bfh”。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include <stdio.h>

    define N 80

    void fun(char s[], int n)

    {

    int i, k;

    【 】;

    for(i=0; i<n; i++)

    {

    s[k++]=s[i];

    if(【 】)

    k--;

    }

    【 】;

    }

    main()

    {

    int i=0,strlen=0;

    char str[N];

    clrscr();

    printf("\nInput a string:\n");

    gets(str);

    while(str[i]!='\0')

    {

    strlen++;

    i++;

    }

    fun(str,strlen);

    printf('\n*** display string ***\n");

    puts(str);

    }


    正确答案:k=0 (i%2==0)||(i%3==0 s[k]='\0'
    k=0 (i%2==0)||(i%3==0 s[k]='\0' 解析:第一空;变量k声明时没有初始化,所以在使用前要对它初始化。因为k用作字符数组的下标,所以初始化为 0。第二空:如果当前字符的下标能被2或3整除,则不保存这个字符。第三空:将所有字符下标能被2或3整除的字符从字符串中删除后,在字符串的最后还要加上结束标记符'\0'。

  • 第20题:

    给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。

    例如,形参s所指的字符串为:This is a C languageprogram.,函数的返回值为6。

    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

    注意:源程序存放在考生文件夹下的BLANKl.C中。

    不得增行或删行,也不得更改程序的结构!


    正确答案:(1)n++ (2)0 (3)s++
    (1)n++ (2)0 (3)s++ 解析:本题中函数fun的功能是计算出形参s所指字符串中包含的单词个数,作为函数值返回。单词之间是以空格隔开的,因此在字符串里面搜索空格,找到一个空格则单词数量加1,如此搜索完整个字符串便可得到单词数量。

  • 第21题:

    函数ReadDat实现从文件in.dat中读取一篇英文文章存入到字符串数组XX中;请编制函数StrOL,其函数的功能是: 以读入文章的行为单位,以空格或标点符号(数据文件中仅含’,’或’.’作为标点符号)作为分隔符,对行中所有单词进行倒排, 单词间仍以空格作为分隔符,之后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组XX中。最后main函 数调用函数wmeDat把结果XX输出到文件0ut.dat中。提示:对于每一行字符串可以先提取最后一个单词,再提取倒数第二个单词,直至第一个单词,单词之后采用空格为分隔符,连接成一行新的字符串。 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。注意:部分源程序存放在test.C文件中。 请勿改动主函数main、读数据函数ReadDat和输出数据函数WriteDat的内容。


    正确答案:
    【审题关键句】以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。
    【解题思路】
    ①定义字符数组line[80]、word[80]和字符指针变量P,循环整型变量i、j。
    ②在for叫循环语句中,循环变量i从0开始,依次递增直到其值等于maxline,实现对文章每行字符串的如下处理。调用内存分配函数memset给字符数组line和word在内存中分配80个字符空间的大小。使指针变量P指向字符串xx[i]的头,变
    量j的初值设为0。利用while循环语句,当指针变量P没有到达xx[i]的结尾时,一直执行如下的操作:当*p是字母时,把*p赋给字符数组line,同时字符数组下标j加l,字符指针P加1,指向下一个字母。直至*p是单词间的分隔符时,退出第二层while循环。调用字符串连接函数strcat在字符串line后面添加一个空格,实现用空格分隔各个单词,再把由前面的单词组成的字符串word连接到当前单词的后面,实现按单词逆序排列。把重新组成的新的字符串利用函数strcpy拷贝到word中。调用函数memset对字符数组line在内存中重新分配80个字符空间,并设置其下标从0开始。当*p非空且不是字母的情况下,指针P加1,指向其下一个字符。依次循环,直到xx[i]的结束。最后把对字符串xx[i]的处理结果word拷贝到xx[i]中,再进行对文章下一行的处理。
    【参考答案】

  • 第22题:

    下面程序的功能是()。include include using namespace std;int main (){ in

    下面程序的功能是( )。 #include <iostream> #include <string> using namespace std; int main () { int i=1, n=0; char s[80],*p; p=s; strcpy(p,"It is a book.."); for (; *p !=' \0' ;p++) { if(*p=='') i=0; else if (i==0) { n++; i=1; } } cout<<"n=" <<n<<end1; return 0; }

    A.统计字符串中的单词个数

    B.统计字符串中的空格个数

    C.统计字符串中的字母个数

    D.统计字符串中的全部字符个数


    正确答案:B
    解析:本题通过for循环对字符串进行扫描,遇到'\0'结束扫描。程序首先将i的值置为1,n的值置为0。在for循环中,通过if语句判断*p指向的字符是否为空格,如果是空格则将i的值置为0,而在elseif语句,如果i的值为0,则n++,然后将i的值重新置为1。如此反复,最后统计出字符串中的空格个数。

  • 第23题:

    编程. 已知字符串:”this is a test of java”.

    按要求执行以下操作:

    (1) 统计该字符串中字母s出现的次数

    (2) 取出子字符串”test”

    (3) 将本字符串复制到一个字符数组Char[] str中.

    (4) 将字符串中每个单词的第一个字母变成大写, 输出到控制台。

    (5) 用两种方式实现该字符串的倒叙输出。(用StringBuffer和for循环方式分别实现)

    (6) 将本字符串转换成一个字符串数组,要求每个数组元素都是一个有意义的英文单词,并输出到控制台


    答案:
    public class Chap53e {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    //(1)
    String string="this is a test of java";
    char[] s=string.toCharArray();
    int count=0;
    for(int i=0;i
    if(s[i]=='s')
    count++;
    System.out.println("s出现了"+count+"次");
    //(2)
    String str1;
    str1=string.substring(string.indexOf('t', 1), string.lastIndexOf('t')+1);
    System.out.println("子字符串为"+str1);
    //(3)
    char[] str=string.toCharArray();
    String[] str2=string.split(" ");
    //(4)
    for(int i=0;i
    { //方法一
    str2[i]=String.valueOf(str2[i].charAt(0)).toUpperCase()+str2[i].substring(1);
    // 方法二
    str2[i]=str2[i].replaceFirst(String.valueOf(str2[i].charAt(0)), String.valueOf(str2[i].charAt(0)).toUpperCase());
    System.out.print(str2[i]+" ");
    }
    //(5)
    StringBuffer sbf=new StringBuffer("this is a test of java");
    sbf.reverse();
    System.out.println(sbf);
    for(int i=string.length()-1;i>=0;i--)
    System.out.print(string.charAt(i));
    //(6)
    String[] strs3=string.split(" ");
    System.out.println(Arrays.toString(strs3));
    }
    }

  • 第24题:

    单选题
    有以下函数:int fun(char *s,char *t){ while((*s)&&(*t)&&(*t++==*s++)); return (*s-*t);}函数的功能是(  )。
    A

    求字符串的长度

    B

    比较两个字符串的大小

    C

    将字符串s复制到字符串t中

    D

    连接字符串s和字符串t


    正确答案: C
    解析:
    函数体执行过程为:将两个字符串首地址传入函数,分别赋给指针s与t,在函数体内s与t所指向的字符串的字符不为'\0'时,判断两个指针指向的字符是否相同,若相同则两个指针分别加一指向下一个字符,若不同则退出while循环,返回不相同的字符的ASCII码值之差。返回值大于0表示字符串s>t;返回值小于0表示s<t;返回值为0,表示s=t。函数实现了比较两个字符串大小的功能。答案选择B选项。