小程序改个错!
该程序运行不了,烦高手看看!/* 给定字符串STRING(长度小于50,由字母和数字组成)
* 1. 将串中小写字符转化成大写
* 2. 提取出所有数字
* 3. 提取出所有字母
* 4. 如果STRING以数字开头,则打印提取出的数字;
* 如果STRING以字母开头,则打印提取出的字母;
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STRING "FdfsJK32f47h5"
#define PRINT_ARRAY(x) if((x) != NULL) printf("%s\n", (x))
char *pAll=NULL;
void LowToUp(char * str)
{
while(str != NULL)
{
if((*str >= 'a')&&(*str <= 'z'))
{
*str += 'A' - 'a';
}
str++;
}
}
int GetMemory(char* p)
{
p = (char*)malloc(strlen(STRING)+1);
pAll=p;
if(p == NULL) return -1;
else return 1;
}
char * GetNumber(char * str)
{
char ret[100];
int i = 0;
while(str != NULL)
{
if((*str >= '0')&&(*str <= '9'))
{
ret[i++] = *str;
}
str++;
}
ret[i] = '\0';
return ret;
}
char * GetLetter(char * str)
{
char ret[100];
int i = 0;
while(str != NULL)
{
if((*str >= 'A')&&(*str <= 'Z'))
{
ret[i++] = *str;
}
str++;
}
ret[i] = '\0';
return ret;
}
int main()
{
char *pNumber=NULL;
char *pLetter=NULL;
LowToUp(STRING); //1. 将串中小写字符转化成大写
if(GetMemory(pAll) == 1) //内存分配
{
strcpy(pAll, STRING);
pNumber = GetNumber(pAll); //2. 提取出所有数字
pLetter = GetLetter(pAll); //3. 提取出所有字母
if((pAll[0] >= '0')&&(pAll[0] <= '9')) PRINT_ARRAY(pNumber); //打印
else PRINT_ARRAY(pLetter);
free(pAll);
return 1;
}
else
{
printf("No Memory can be used!\n");
return -1;
}
}
----------------解决方案--------------------------------------------------------
你不是发过了吗?怎么还发?
----------------解决方案--------------------------------------------------------
晕,不是昨天刚改过...
http://bbs.bccn.net/thread-219388-1-2
----------------解决方案--------------------------------------------------------
就是。我还说了,常量是不能修改的
----------------解决方案--------------------------------------------------------
不好意思,没看到有人发了,呵呵!
----------------解决方案--------------------------------------------------------
貌似你们是同学?
----------------解决方案--------------------------------------------------------
同胞们,我是第一次在论坛里转,不过觉得这个论坛还可以,大家以后要多多帮助啊
----------------解决方案--------------------------------------------------------
乘风界水已经毕业了,我只是大一的,呵呵。我加了一个C的群,他也正好在里面,有机会的话我就请教请教他,这题就是他给的,说可以考验一下大家。我改成了如下代码,不过还是不行,麻烦帮我看下!
/* 给定字符串STRING(长度小于50,由字母和数字组成)
* 1. 将串中小写字符转化成大写
* 2. 提取出所有数字
* 3. 提取出所有字母
* 4. 如果STRING以数字开头,则打印提取出的数字;
* 如果STRING以字母开头,则打印提取出的字母;
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *pAll=NULL;
char *pNumber=NULL;
char *pLetter=NULL;
void LowToUp(char *str)
{
int i;
for(i=0;str!=NULL;i++)
{
if((str[i] >= 'a')&&(str[i] <= 'z'))
{
str[i] += ('A' - 'a');
}
pAll[i]=str[i];
}
pAll[i]='\0';
}
int GetMemory(char *str)
{
char *p = (char*)malloc(strlen(str)+1);
pAll=p;
if(p == NULL) return -1;
else return 1;
}
void GetNumber()
{
char ret[100];
int i = 0,j=0;
for(;pAll!=NULL;i++)
if((pAll[i] >= '0')&&(pAll[i] <= '9'))
{
ret[j++] = pAll[i];
}
ret[j]='\0';
pNumber=ret;
}
void GetLetter()
{
char ret[100];
int i = 0,j=0;
for(;pAll!=NULL;i++)
if((pAll[i] >= 'A')&&(pAll[i] <= 'Z'))
{
ret[j++] = pAll[i];
}
ret[j] = '\0';
pLetter=ret;
}
int main()
{
char *str="FdfsJK32f47h5";
//1. 将串中小写字符转化成大写
if(GetMemory(str) == 1) //内存分配
{
LowToUp(str);
GetNumber(); //2. 提取出所有数字
GetLetter(); //3. 提取出所有字母
}
else
{
printf("No Memory can be used!\n");
return -1;
}
if(pNumber!=NULL)
printf("the Number are:%s\n",pNumber);
if(pLetter!=NULL)
printf("the Letter are:%s\n",pLetter);
getchar();
return 0;
}
----------------解决方案--------------------------------------------------------
char *str="FdfsJK32f47h5";
你这样定义还是字符串常量
----------------解决方案--------------------------------------------------------
那如果再定义char *p=str;然后下面的str都换成p,这样子呢,此时的p是变量了?结果还是不对,真汗
----------------解决方案--------------------------------------------------------