单选题若字符指针p所指向的字符串为“abcdefg”,在执行语句char* ap=new char[strlen(p)+1];之后,ap指向的字符数组的元素个数为(  )。A 9B 8C 7D 6

题目
单选题
若字符指针p所指向的字符串为“abcdefg”,在执行语句char* ap=new char[strlen(p)+1];之后,ap指向的字符数组的元素个数为(  )。
A

9

B

8

C

7

D

6


相似考题
参考答案和解析
正确答案: B
解析:
字符指针p指向的字符串为“abcdefg”,则strlen(p)= 7,因此ap指向的字符数组的元素个数为8个。
更多“若字符指针p所指向的字符串为“abcdefg”,在执行语句char* ap=new char[strlen(p)+1];”相关问题
  • 第1题:

    有如下类定义:

    classA{

    char*a;

    public:

    A( ):a(O){}

    A(char*aa){//把aa所指字符串拷贝到a所指向的存储空间

    a=__;

    strcpy(a,aa);

    }

    ~A( ){delete[]a;}

    };

    横线处应填写的表达式是( )。

    A.Newchar[strlen(aa)+1]

    B.char[strlen(aa)+1]

    C.char[strlen(aa)]

    D.newchar[sizeof(aa)-1]


    正确答案:A
    A。【解析】对动态分配存储空间的考查,在C++中,回车键需计一字符,即总的长度为strlen(aa)+1。

  • 第2题:

    阅读下列算法说明和算法,将应填入(n)处的语句写在对应栏内。

    【说明】

    本程序可以将字符串s1中出现的所有s2子串替换成s3,形成一个新串,但不破坏字符串s1。

    【代码】

    include<stdio.h>

    include<stdlib.h>

    include<string.h>

    char*replace(char *s1, char *s2,char *s3)

    { char *p, *q, *r, *s; int |2,|3, i=0;

    |2=strlen(s2);

    |3=strlen(s3);

    p=s1;

    while((p=strstr(p,s2))!=NULL)

    { i++; /* 统计s2串出现的次数*/

    (1);

    }

    i=(2);

    s=r=(char*)malloc(i); /*分配动态内存存放新字符串*/

    p=s1;

    while(1)

    { q=strstr(p, s2); /* s2串是否在s1中出现,q是首次出现的位置*/

    if(q!=NULL)

    { i=q-p;

    (3);

    r+=i;

    (4);

    r+=|3;

    p=q+|2; /*将指向s1串的指针移到s2子串出现的位置后,

    为下一次循环做好准备*/

    }

    else /*q为空,表示剩余的s1串中已经没有s2*/

    { (5);

    break; /*终止循环*/

    }

    }

    return(s); /*返回指向所形成的新串的指针*/

    }

    void main()

    { char *a="sabcababde", *b="ab", *c="efg", *d;

    d=replace(a, b, c); printf("result=%s\n", d); free(d);

    }


    正确答案:(1)p+=12 (2)strlen(s1)-i*12+i*13+1 (3)strncpy(rpi) (4)strcpy(rs3) (5)strcpy(rp)
    (1)p+=12 (2)strlen(s1)-i*12+i*13+1 (3)strncpy(r,p,i) (4)strcpy(r,s3) (5)strcpy(r,p) 解析:本题考查用C语言实现对字符串的操作。
    题目要求将字符串s1中出现的所有子串s2替换成s3,形成一个新串,但不破坏字符串s1。要不破坏字符串s1,只有用一个新串来存放处理结果;要用到新串,那么就需要重新分配空间。
    第(1)空在第一个循环体中,此循环体的作用在注释中已经给出,用来统计串s2在串s1中出现的次数,这里的统计变量已经给出,并将结果存放在统计变量i中,但每次统计成功后串s1的位置应该往后移动串s2的长度,由程序我们可以看出,串s1存放在指针变量p中,因此,指针变量p指的位置需要往后移动串s2的长度,而串s2的长度存放在变量12中。因此,此空答案为p+=12。
    第(2)空很明显是用来给变量i赋一个值,但根据s=r=(char*)malloc(i)语句我们可以推断出,当前变量i中存放的是新串的长度。而新串的长度应该等于串s1的长度减去串中x个串s2的长度,加上x个串s3的长度再加1,而在上面的循环中已经求出了串s2在串s1中出现的次数,结果存放在变量i中。因此,此空答案为strlen(sl)-i*12+i*13+1。
    第(3)空是在if(q !=NULL)成立的情况下运行的语句,而变量q指向的是s2在s1中首次出现的位置,如果条件成立,说明串s2在串s1中出现了,语句i=q-p用来表示出现的位置到s1开始位置的距离。在这些条件都清楚了后,应该往新的串中写字符了,首先写串s1的前i个字符,此空就是用来完成这个功能的,因此,此空答案为strncpy(r,p,i)。
    第(4)空是接着上一空而来的,在上面我们[分析]到,把串s1的前i个字符写入新串,那么在新串中接着要出现的应该是替换串s2的串s3,此空的任务应该是将串s3写入新串中,因此,此空答案为strcpy(r,s3)。
    第(5)空是在if(q !=NULL)不成立的情况下运行的语句,这说明串s2不在串s1中出现,在这种情况下,串应该不需要进行替换操作,而直接将串s1写入到新串中,此空的作用就是用来实现这个功能的,因此,此空答案为strcpy(r,p)。

  • 第3题:

    有以下类定义:

    class A{

    char*a;

    public:

    A( ):a(0){ }

    A(char*aA) { //把aa所指字符串复制到a所指的存储空间

    a=______;

    strcpy(a,aA) ;

    }

    ~A( ){delete[ ]a;}

    };

    画线处应填写的表达式是

    A.new char[strlen(aA)+1]

    B.char[strlen(aA)+1]

    C.char[strlen(aA)]

    D.new char[sizeof(aA)-1]


    正确答案:A
    解析:为a申请一个比aa串长增加1的一个存储空问。B和C缺少new运算子,D分配空间不足。

  • 第4题:

    使用VC6打开考生文件夹下的工程test31_3。此工程包含一个test31_3.cpp,其中定义了可以动态分配的字符串类,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。

    (1)定义类tstring的私有数据成员length和p,它们分别是血型的数据和字符型的指针,其中length表示一个字符串的长度。请在注释“//**1**”之后添加适当的语句。

    (2)完成类tstring的构造函数,使length等于字符串m的长度,并申请由指针p指向的length长的字符型空间,将m所指的字符串复制到该空间。请在注释“//**2**”之后添加适当的语句。

    (3)完成类tstring的成员函数strcopy(tstringn)的定义,该函数将对象n的值(包括字符串长度和字符串本身)复制给调用该函数的对象(对象n的字符串长度任意)。请在注释“//**3**”之后添加适当的语句。

    (4)完成类tstring的友元函数strlink(tstring m,tstring n)的定义,该函数将可动态分配的字符串类对象m和n的字符串成员连接在一起(对象m和n的字符串长度任意),并返回该串。请在注释“//**4**”之后添加适当的语句。

    注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

    程序输出结果如下:

    hello the world!

    源程序文件test31_3.cpp清单如下:

    include<iostream.h>

    include<conio.h>

    include <string.h>

    class tstring

    {

    public:

    //** 1 **

    tstring(char *m)

    {

    //** 2 **

    strcpy(p,m);

    }

    void strcopy(tstring n);

    friend char *strlink(tstring m,tstring n);

    };

    void tstring::strcopy(tstring n)

    {

    //** 3 **

    char *q;

    q=new char[length];

    strcpy(q,tstring::p);

    q=strcat(tstring::p,n.p);

    tstring::p=q;

    tstring::length=strlen(tstring::p);

    }

    char *strlink(tstring m, tstring n)

    {

    int length=strlen(m.p)+strlen(n.p);

    char *p;

    //** 4 **

    strcpy(p,m.p);

    p=strcat(p,n.p);

    return p;

    }

    void main ( )

    {

    tstring a("hello ");

    tstring b("the world");

    tstring c("!");

    a.strcopy(b);

    cout<<strlink(a,c)<<end1;

    }


    正确答案:(1) int length; char *p; (2) length=strlen(m); p=new char[length]; (3) int length=strlen(tstung::p)+strlen(n.p); (4) p=new char[length];
    (1) int length; char *p; (2) length=strlen(m); p=new char[length]; (3) int length=strlen(tstung::p)+strlen(n.p); (4) p=new char[length]; 解析:本题是对类与字符串常用函数的综合考查。字符串常用函数strcpy、strcat和strlen的调用格式和调用限制是需要熟练掌握的。程序中通过申请新的空间和改变指针指向解决了原有字符串函数strcpy的目标字符串空间必须足够大的问题。根据实际情况利用以有类建立新类的能力是需要培养的。

  • 第5题:

    以下函数实现的功能是void fun (char *s){ char *p,*q,temp; p=s; q=s+ strlen(s)-1; while (p<q) { temp=*p; *p=*q; *p=temp; p++; q--; }}

    A.将一个字符串首尾颠倒

    B.计算字符串的长度

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

    D.将字符串中的小写字母变成大写字母


    正确答案:A
    解析:本题考核while循环语句和指针的使用。在该函数中,循环开始时,指针p指向字符串的第1个字符,指针q指向字符串的最后一个字符,首先交换这两个字符;然后,指针p前进一个字符位置(指向下一个字符),指针q后退一个字符位置(指向前一个字符);经过若干次循环,条件pq将为假(即指针p和指针q相遇),循环结束。从而实现了将一个字符串首尾颠倒的功能。

  • 第6题:

    语句Char(*P)说明了( )。

    A.P是指向函数的指针,该函数返回一个Char型数据

    B.P是指向Char型数据的指针变量

    C.P是指向数组的指针变量

    D.P是一个函数名,该函数的返回值是指向Char型数据的指针


    正确答案:A
    P是指向函数的指针,该函数返回一个char型数据。

  • 第7题:

    变量s的定义为“char *s="Hello world!";”,要使变量p指向s所指向的同一个字符串,则应选取(47)。

    A.char *p=s;

    B.char *p=&s;

    C.char *p;p=*s;

    D.char *p; p=&s;


    正确答案:A
    解析:按照要求,p应该定义为一个指向字符串的指针,它的值和s一样,所以选择A。

  • 第8题:

    假定s被定义为指针类型char *的变量,初始指向的字符串为"Hello world!",若要使变量p指向s所指向的字符串,则p应定义为()。

    Achar *p=s;

    Bchar *p=&s;

    Cchar *p;p=*s;

    Dchar *p; p=&s;


    A

  • 第9题:

    const char *p说明了p是指向字符串常量的指针。


    正确答案:正确

  • 第10题:

    单选题
    假定s被定义为指针类型char *的变量,初始指向的字符串为"Hello world!",若要使变量p指向s所指向的字符串,则p应定义为()。
    A

    char *p=s;

    B

    char *p=&s;

    C

    char *p;p=*s;

    D

    char *p; p=&s;


    正确答案: D
    解析: 暂无解析

  • 第11题:

    填空题
    执行char*p=new char(’a’)操作后,p所指向的数据对象的值为()。

    正确答案: ‘a’
    解析: 暂无解析

  • 第12题:

    单选题
    有以下程序(其中的strstr()函数头部格式为:char *strstr(char *p1,char *p2)确定p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址):#include #include char *a=you;char *b=Welcome you to Beijing!;main(){ char *p; p=strstr(b,a)+strlen(a)+1; printf(%s,p);}程序的运行结果是(  )。
    A

    to Beijing!

    B

    you to Beijing!

    C

    Welcome you to Beijing!

    D

    Beijing!


    正确答案: A
    解析:
    调用strstr函数,返回值为a指向的字符串在b指向的字符串中第一次出现的位置,并将此地址赋给指针p。strlen()函数求字符串的实际长度(不包含结束标志)。strstr函数返回的地址下标值为8,加上a长度3,再加1,指针P指向的地址下标值为12,输出:to Beijing!,答案选择A选项。

  • 第13题:

    假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:除了尾部的,:号之外,将字符串中其他*号全部删除。形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言的字符串函数。

    例如,若字符串中的内容为****A*BC*DEF*G******,删除后,字符串中的内容应当是ABCDEFG******。

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

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

    试题程序:

    include<conio. h>

    include<stdio. h>

    void fun(char *a, char *p)

    {

    }

    main ( )

    char s[81],*t;

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

    gets (s);

    t=s;

    while (*t)

    t++;

    t--; /*指针t指向字符串尾部* /

    while (*t== '*' )

    t--; /*指针t指向最后一个字母*/

    fun (s, t);

    printf ("The string after deleted: \n");

    puts (s);

    }


    正确答案:void fun(char *a char *p) { char *t=a; for (; t=p; t++) if(*t!='*') * (a++)=*t; /*将p以前所有不是*号的字符保留下来*/ for (;*t!='\0' ;t++) * (a++) =.t; / * 将p以后的所有*号保留下来*/ *a='\0'; / *在字符串最后加上结束标记位*/
    void fun(char *a, char *p) { char *t=a; for (; t=p; t++) if(*t!='*') * (a++)=*t; /*将p以前所有不是*号的字符保留下来*/ for (;*t!='\0' ;t++) * (a++) =.t; / * 将p以后的所有*号保留下来*/ *a='\0'; / *在字符串最后加上结束标记位*/ 解析:本题曾在历年上机考试及模拟试题中多次出现,一般用两个循环语句来实现。第1个循环的作用是将p以前所有不是*号的字符保留下来,即删除所有的*号。第2个循环的作用是将p以后的所有*号保留下来。

  • 第14题:

    有如下类定义:

    class A{

    char *a;

    public:

    A():*(0){}

    A(char * aA){//把aa所指字符串拷贝到a所指向的存储空间

    a=________;

    strcpy(a,aA);

    }

    ~A(){delete[]a;}

    };

    横线处应填写的表达式是

    A.new char[strlen(aA)+1]

    B.char[strlen(aA)+1]

    C.char[strlen(aA)]

    D.new char[sizeof(aA)-1]


    正确答案:A
    解析:利用new运算符进行内存申请操作,长度为aa字符串长度加上字符串结束标志‘\0’,总共申请strlen(aa)+1字节,故选A)。

  • 第15题:

    以下函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址,例如,str所指字符串为Hello!,c中的字符为e,则函数返回字符串ello!的首地址。若str所指字符串为空或不包含c中的字符,则函数返回NULL,请填空。char *fun(char *str,char c){ int n=0; char *p=str; if(p!=NULL) while(p[n]!=c&&p[n]!=’\0’) n++; if(p[n]==’\0’) return NULL; return();}


    正确答案:p+n
    在本题中,函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址。
    在本题的程序中,fun函数带有两个形参,其中一个是指针str,它指向字符串的首地址,另一个是字符变量c。程序首先定义了一个整型变量n,从程序中可知,它是字符串str中参数c相对于首地址的偏移量,然后定义了一个指针变量p,指向字符串str的首地址,然后执行条件语句,如果字符串不为空,则执行循环语句,循环结束的条件是要么字符串结束,要么找到形参c中对应的字符。根据循环结束的条件我们可以判断,其非死循环,循环结束后,从程序中可以看出,判断循环结束的原因是否因为字符串结束而结束的,如果是,说明没找到形参c中对应的字符,返回NULL。
    如果不是,则说明是因为找到了形参c中对应的字符而结束循环的。根据题目要求,需要返回以形参c中字符开头的后续字符串的首地址,而这时以形参c中字符开头的后续字符串的首地址为p+n。

  • 第16题:

    若要用下面的程序片段使指针变量p指向一个存储字符型变量的动态存储单元,则应填入; char * p;p= ( ) malloc (sizeof (char));

    A.char

    B.char *

    C.(* char)

    D.(char *)


    正确答案:D

  • 第17题:

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

    [说明1]

    函数void fun(char*w,char x,int*n)用来在w数组中插入x,w数组中的数已按由小到大顺序存放,n指存储单元中存放数组中数据的个数,插入后数组中的数仍有序。

    [C函数1]

    void fun(char*W,char x,int*n)

    { int i,P;

    p=0;

    w[*n]=x;

    while(x>w[p]) (1) ;

    for(i=*n,i>p;i--)w[i]=(2);

    w[p]=x;

    ++*n;

    }

    [说明2]

    函数void revstr(char*s)将字符串s逆置。例如:字符串“abcde”,经过逆置后变为“edcba”。

    [C函数2]

    void revstr(char*s)

    { char*p,c;

    if(s==NULL)return;

    p=(3); /*p指向字符串s的最后一个有效字符*/

    while(s<p){ /*交换并移动指针*/

    C=*s;

    (4)=*p;

    (5)=c;

    }

    }


    正确答案:(1) p++ (2) w[i-1] (3) s+strlen(s)-1 (4) *s++或*(s++) (5) *p-或*(p--)
    (1) p++ (2) w[i-1] (3) s+strlen(s)-1 (4) *s++或*(s++) (5) *p-或*(p--) 解析:函数1的fun()中的while循环是为了找到x的插入位置,因此(1)填“p++”,for循环是移动数组中的元素,因此(2)填“w[i-1]”。
    对于函数2,设字符串的长度为n,则该函数的思想为将*(s+j)与*(s+n-1+i)对换,i=0....n/2。采用指针来实现,s为起始地址,p定位为最后一个字符的位置,所以空(3)应填“s+strlen(s)-1”;采用*s与*p交换后为s++与P--。即空(4)填“*s++”或“*(s++)”,空(5)填“*p-”或“*(p--)”。

  • 第18题:

    已定义以下函数 fun(char*p2,char*p1) { while((*p2=*pl)!='\0'){p1++;p2++;}} 函数的功能是

    A.将p1所指字符串复制到p2所指内存空间

    B.将p1所指字符串的地址赋给指针p2

    C.对p1和p2两个指针所指字符串进行比较

    D.检查p1和p2两个指针所指字符串中是否有'\0'


    正确答案:A
    解析:在本题中,while((*p2=*p1)!='\0')有两个作用,一个是判断条件是否成立以决定是否再次进入循环,另一个作用是判定前先完成*p2=*p1,该处的作用是把p1所指存储单元的字符逐一送p2所指存储单元中,直到p1所指单元内容为'\0'为止。

  • 第19题:

    以下函数的功能是( )。fun(char *p2, char *p1) { while((*p2=*p1)!='\0'){ p1++;p2++; }}

    A、将p1所指字符串复制到p2所指内存空间中

    B、将p1 所指字符串的地址赋给指针 p2

    C、对p1和p2两个指针所指字符串进行比较

    D、检查p1和p2两个指针所指字符串中是否有‘\0’


    正确答案:A

  • 第20题:

    执行char*p=new char(’a’)操作后,p所指向的数据对象的值为()。


    正确答案:‘a’

  • 第21题:

    char*const p表明p是一个指针,它只能指向一个字符串常量。


    正确答案:错误

  • 第22题:

    单选题
    若字符指针p所指向的字符串为“abcdefg”,在执行语句char* ap=new char[strlen(p)+1];之后,ap指向的字符数组的元素个数为(  )。
    A

    9

    B

    8

    C

    7

    D

    6


    正确答案: D
    解析:
    字符指针p指向的字符串为“abcdefg”,则strlen(p)= 7,因此ap指向的字符数组的元素个数为8个。

  • 第23题:

    判断题
    const char *p说明了p是指向字符串常量的指针。
    A

    B


    正确答案:
    解析: 暂无解析

  • 第24题:

    判断题
    char*const p表明p是一个指针,它只能指向一个字符串常量。
    A

    B


    正确答案:
    解析: 暂无解析