SubStr函数为求子串,执行SubStr(t,"abcdefghi",3,4)的结果是()。A、adcdB、defC、cdefD、fghi

题目
SubStr函数为求子串,执行SubStr(t,"abcdefghi",3,4)的结果是()。

A、adcd

B、def

C、cdef

D、fghi


相似考题
更多“SubStr函数为求子串,执行SubStr(t,"abcdefghi",3,4)的结果是()。 ”相关问题
  • 第1题:

    编写一个函数findStr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为"asd asasdfg asd as zx67 asd mklo",子字符串为"as",函数返回值是6。

    函数ReadWrite()实现从文件in.dat中读取两个字符串并调用函数findStr(),最后把结果输出到文件out.dat中。

    注意:部分程序已经给出。

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

    include <stdio.h>

    include <string.h>

    include <conio.h>

    int findStr(char *str,char *substr)

    {

    }

    main()

    {

    char str[81],substr[3];

    int n;

    clrscr();

    printf("输入原字符串");

    gets(str) ;

    printf("输入子字符串:");

    gets(substr);

    puts(str);

    puts(substr);

    n=findStr(str, substr);

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

    ReadWrite();

    }

    ReadWrite()

    {

    char str[81],substr[3],ch;

    int n, len,i=0;

    FILE *rf, *wf;

    rf=fopen("in.dat", "r");

    wf=fopen("out.dat", "w");

    while(i<25)

    {

    fgets(str, 80, rf);

    fgets(substr, 10, rf);

    len=strlen(substr)-1;

    ch=substr[len];

    if(ch=='\n' || ch==0xla)substr[len]=0;

    n=findStr(str, substr);

    fprintf(wf, "%dkn", n);

    i++;

    }

    fclose(rf);

    fclose(wf);

    }


    正确答案:int findStr(char *strchar *substr) { int n; char *p *r; n=0; while( *str ) { p=str; r=substr; while(*r) if(*r==*p) { r++; p++; } else break; if(*r=='\O') n++; str++; } return n; }
    int findStr(char *str,char *substr) { int n; char *p , *r; n=0; while( *str ) { p=str; r=substr; while(*r) if(*r==*p) { r++; p++; } else break; if(*r=='\O') n++; str++; } return n; } 解析:该程序属于按条件查找类型的题目,考核的知识点为:
    (1)在给定的字符串中查找指定字符;
    (2)统计查找后满足条件的个数。
    本题的解题思路是:对原字符串中的字符进行扫描,若原字符串中含有子字符串,即原字符串的其中一部分与子字符串完全相同时,统计出个数。判断原字符串是否含有子字符串,可以将原字符串中的元素逐个与子字符串相比较,当两字符串中各个元素都相同且子字符串结束时,则证明原字符串包含一个子字符串。在统计个数的时候需要设置一个记录变量,每当原字符串包含子字符串一次的时候,该记录变量自动加1。
    程序的流程是:首先通过键盘接收两个字符串,其中一个作为原字符串,另一个作为子字符串,然后调用findStr()函数对两字符串进行比较,处理后的结果由ReadWrite()函数写回文件out.dat中。
    答案解析如下:
    int findStr(char *str,char *substr)
    {
    int n;/*定义变量,n代表子符串出现次数*/
    char p,r;/*定义指针变量*/
    n=0;
    while(str)
    /*当原字符串不为空,即*str不为空时进入到外层while,此时循环中原字符串指针str和子字符串指针substr都指向其字符串内的第一个元素*/
    {
    p=str;/*将字符串的指针str赋给p*/
    r=substr;/*将字符串的指针substr赋给r*/
    while(*r)/*当子字符串也不为空时,即*r不空时进入内嵌的while循环*/
    if(*r==*p)/*将原字符串与子字符串逐个元素进行比较看是否相等*/
    {
    r++;
    p++;
    }
    /*将原字符串与子字符串分别后移一个字符*/
    else
    break;/*否则结束循环*/
    if(*r=='\0')/*结束while循环的情况有两种:(1)比较完毕,即原字符串中包含该子字符串,此时子字符串的指针指向串尾(为“\0”);(2)未比较完毕,此时子字符串的指针不指向串尾。if语句的功能是通过判断子字符串的指针是否指向串尾进而来判断内层while循环结束的原因*/
    n++;/*出现的次数加1*/
    str++;/*牟字符串指针也指向下一个字符*/
    }
    return n;/*返回出现的次数*/
    }

  • 第2题:

    下列给定程序中,函数fun()的功能是:统计字符串substr在字符串srt中出现的次数。例如,若字符串为aaas 1 kaaas,子字符串为as,则应输出2。

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

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

    试题程序:

    include <stdio.h>

    fun (char *str, char *substr)

    {int i, j, k, num=0;

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

    for (i=0, str [i], i++)

    for (j=i, k=O; substr [k]==str [ j ]; k++, j ++ )

    if (substr [k+l]==' \0')

    {num++;

    break;

    }

    return num;

    }

    main ( )

    { char str[80],substr[80];

    printf("Input a string: ");

    gets (str);

    printf("Input a sbustring: ");

    gets (substr);

    printf ("%d\n ", fun (str, substr) );


    正确答案:错误:for(i=0srt[i]i++) 正确:for(i=0;str[i];i++)
    错误:for(i=0,srt[i],i++) 正确:for(i=0;str[i];i++) 解析:从字符串s中找出子字符串的方法是:从第1个字符开始,对字符串进行遍历;若s串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串的结尾,则跳出循环;若s串的字符和t串的字符不对应相同,则继续对s串的下一个字符进行处理。

  • 第3题:

    运算结果是字符串“home”的表达式是( )。A.LEFT(”myhome”,4)B.RIGHT(”hometown”,4)SX

    运算结果是字符串“home”的表达式是( )。

    A.LEFT(”myhome”,4)

    B.RIGHT(”hometown”,4)

    C.SUBSTR(”myhometown”,4,4)

    D.SUBSTR(”myhometown”,3,4)


    正确答案:D
    D。【解析】取子串的函数有下列三种格式:①LEFT从指定表达式值的左端取一个指定长度的子串作为函数值。②RIGHT从指定表达式值的右端取一个指定长度的子串作为函数值。③SUBSTR从指定表达式值的指定起始位置取指定长度的子串作为函数值。在SUBSTR函数中,若缺省第三个自变量<长度>,则函数从指定位置一直取到最后一个字符。从以上三个函数的功能得知,选项A的结果是“my—h0”,选项8的结果是“town”,选项C的结果是“omet”,选项D的结果是“home”。

  • 第4题:

    编写一个函数findStr(),该函数统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为"asd asasdfg asd as zx67 asd mklo",子字符串为“as”,函数返回值是6。

    函数ReadWrite()的功能是实现从文件in40.dat中读取两个字符串,并调用函数findstr(),最后把结果输出到文件out40.dat中。

    注意:部分源程序已给出。

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

    include<stdio.h>

    include<string.h>

    include<conio.h>

    int findStr(char *str,char *substr)

    {

    main ( )

    {

    char str[81],substr[3];

    int n;

    clrscr();

    printf("输入原字符串: ");

    gets(str);

    printf ("输入子字符串: ");

    gets(substr);

    puts(str);

    puts(substr);

    n=findStr(str,substr);

    printf("n=%dkn",n);

    ReadWrite();

    }

    ReadWrite()

    {

    char ch, str[81],substr[3];

    int n,len, i=0;

    FILE *rf,*wf;

    rf=fopen("in40.dat","r");

    wf=fopen("out40.dat","w");

    while(i<5)

    {

    fgets(str,80,rf);

    fgets(substr,10,rf);

    len=strlen(substr)-1;

    ch=substr[len];

    if(ch=='\n'||ch==Oxla)

    substr[len]=0;

    n=findStr(str,substr);

    fprintf(wf,"%dln",n);

    i++;

    }

    fclose(rf);

    fclose(wf);

    }


    正确答案:int findStr(char *strchar*substr) {int n; char *p*r; n=0; while(*str) { p=str; /*指针p指向字符串首地址*/ r=substr; /*指针r指向子字符串首地址*/ while(*r) if(*r==*p) /*如果子字符串的第一个字符等于字符串中的该字符则继续比较下一个字符*/ { r++; p++; } else break; /*否则退出循环*/ if(*r=='\0') /*如果子字符串在字符串中出现了一次*/ n++; /*则n加1进行统计*/ str++; /*指向字符串中的下一个字符*/ } return n; /*返回n*/ }
    int findStr(char *str,char*substr) {int n; char *p,*r; n=0; while(*str) { p=str; /*指针p指向字符串首地址*/ r=substr; /*指针r指向子字符串首地址*/ while(*r) if(*r==*p) /*如果子字符串的第一个字符等于字符串中的该字符,则继续比较下一个字符*/ { r++; p++; } else break; /*否则退出循环*/ if(*r=='\0') /*如果子字符串在字符串中出现了一次*/ n++; /*则n加1,进行统计*/ str++; /*指向字符串中的下一个字符*/ } return n; /*返回n*/ } 解析:本题考查的知识点如下:
    (1)指针的相关操作。
    (2)强行退出———break的使用。
    指针是C语言中的一个难点。在这里,我们要使用指针实现对数组的访问继而进行字符韵比较。使用数组存放字符串时,存放的字符个数要比数组的容量小1,因为数组最后一个位置存放的是空格或者结束标志位。我们可利用这一点来判断一个字符串是否已经结束。在循环结构中常常要出现强行退出的情况,这里要使用到bleak语句强行退出一层循环。当字符串中的某个字符与子字符串的第一个字符不同时,则将字符串中的下一个字符与子字符串中的第一个字符比较,而不是与子字符串中的第二个字符比较。

  • 第5题:

    运算结果是字符串“home”的表达式是( )。

    A.LEFT("myhome",4)

    B.RIGHT("hometown",4)

    C.SUBSTR("myhometown",4,4)

    D.SUBSTR("myhometown",3,4)


    正确答案:D
    解析:取子串的函数有以下3个。
    格式1:LEFT(字符表达式>,长度>)
    格式2:RIGHT(字符表达式>,长度>)
    格式3:SUBSTR(字符表达式>,起始位置>[,长度>])
    LEFT()从指定表达式值的左端取一个指定长度的子串作为函数值;RIGHT()从指定表达式值的右端取一个指定长度的子串作为函数值;SUBSTR()从指定表达式值的指定起始位置取指定长度的子串作为函数值。在 SUBSTR()函数中,若缺省第2个自变量长度>,则函数从指定位置一直取到最后一个字符。
    从以上2个函数的功能得知,选项A)的结果是“myho”,选项B,)的结果是“town”,选项C)的结果是“omet”选项D)的结果是“home”。