当前位置: 代码迷 >> C语言 >> 小程序改个错!
  详细解决方案

小程序改个错!

热度:401   发布时间:2008-06-17 13:16:33.0
小程序改个错!
该程序运行不了,烦高手看看!

/* 给定字符串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是变量了?结果还是不对,真汗
----------------解决方案--------------------------------------------------------
  相关解决方案