C++中字符串问题?

来源:百度知道 编辑:UC知道 时间:2024/06/01 03:00:16
#include <stdio.h>
#include <string.h>

int CountChar(char * p, char c)
{
int i = 0, n = 0;
for(; *(p + i) != '\0'; i++)
{
if(*(p + i ) == c)
n++;
}
return n;
}

void main()
{
char c;
char * p = "";//这句如何改才能不定义数组,只用指针
printf("please input the string:\n");
gets(p);
printf("please input the character:\n");
c = getchar();
printf("the string contains %d \n", CountChar(p, c));
}

要不定义数组,但也能使程序正确运行,要求在VC++环境中实现?
如果谁说清,我的程序为什么不行,再加20分

char p[100];
也可以
char *p=new[100];

你的 char * p = "";这句话只是给p这个字符指针分配了一个字符的空间,里面放着'\0',而你的gets(p); 是将一个字符串放在以p为首地址的空间中,但你的p的空间大小只有一个字符,所以放不进去了,就会发生错误.按我上面的任意一种修改方法都可以

//修改如下
#include <stdio.h>
#include <string.h>

int CountChar(char * p, char c)
{
int i = 0, n = 0;
for(; *(p + i) != '\0'; i++)
{
if(*(p + i ) == c)
n++;
}
return n;
}

void main()
{
char c;
char p;//修改后
printf("please input the string:\n");
gets(&p); //这里也改一下
printf("please input the character:\n");
c = getchar();
printf("the string contains %d \n", CountChar(&p, c));
}

修改如下:
……
char c;
char *p = new char[128];//动态申请128*sizeof(char)的内存空间,返回指针即可。注意申请的空间大小要足够装下一行数据。
printf("please input the string:\n");
……

问题补充:<