LittleC 发表于 2012-5-7 23:13:17

C与指针上的一道练习题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int prepare_key(char *key)
{
    char list[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    /*
    **下面要做的是除去key中重复的字母;
    */
    char list_1;
    char temp;
    int count = 0,i = 0;
    while(i <= strlen(key))
    {
      if(strchr(temp,*(key + i)) == NULL)
      {
            *(temp + count) = *(key + i);
            count += 1;
      }
      i++;
    }
    *(temp + count + 1) = '\0';

    /*
    **以上除去了key中的重复字母,将新的字符串放在temp中;
    */
    int j = 1;
    while(j <= strlen(temp))
    {
      *strpbrk(list,temp) = '*';
      j ++;
    }
    /*
    **把list中的temp有的字符变成'*';
    */
    i = 0;
    j = 0;
    while(i <= strlen(list))
    {
      if(isalpha(*(list + i)))
      {
            *(list_1 + j) = *(list + i);
            j++;
      }
      i++;
    }
    *(list_1 + j) = '\0';
    /*
    **list中的'*'被删除后形成新的字符数组list_1;把temp复制到key中,再把list_1接到key后面;
    */
    strcpy(key,temp);
    strcat(key,list_1);
    return 0;


}

int main()
{
    char key = "PENGXIAOLONG";
    prepare_key(key);
    printf("%s\n",key);

    return 0;
}


C与指针 190页的第12题,我简化了,但这个程序一运行就死。大神们哪帮个忙~~

LittleC 发表于 2012-5-7 23:17:57

呵呵我知道;了我的temp和list_1没初始化只要随便给他们初始化一下就好了

越野e族 发表于 2012-5-8 07:55:33

{:5_99:}

你可以调试出来的嘛。。。

temp="",list_1=""
初始化就行了。

越野e族 发表于 2012-5-8 07:56:14

本帖最后由 越野e族 于 2012-5-8 07:58 编辑

...原来你早就知道了。囧,没看回复,直接回复你了{:5_100:}


楼主,你试下初始化temp[]=“” list_1[]="",看下结果如果。就是不标字符串长度看看。应该有意想不到的收获。

LittleC 发表于 2012-5-8 12:37:09

越野e族 发表于 2012-5-8 07:56 static/image/common/back.gif
...原来你早就知道了。囧,没看回复,直接回复你了




我去试试。不过我是在发了贴之后才发现问题的

LittleC 发表于 2012-5-8 12:39:49

越野e族 发表于 2012-5-8 07:56 static/image/common/back.gif
...原来你早就知道了。囧,没看回复,直接回复你了




只打印 了一个字符P ,是不是因为没定义长度,所以默认长度是'\0'占的那一个字节?

_作业 发表于 2012-5-8 22:03:09

现在改汇编了,看不懂C了

zinber 发表于 2012-5-9 11:35:02

学习,学习了

阔怀 发表于 2015-8-13 11:00:34

{:1_1:}
页: [1]
查看完整版本: C与指针上的一道练习题