无法想出这个C编程

时间:2012-02-10 23:39:08

标签: c

该程序应该删除除字母之外的所有内容并创建一个新字符串,该字符串只包含大写字母。

但是,它不会打印结果。

以下是代码:

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

char *remove_up(char input[])
{
    char *new_str = (char *) malloc(strlen(input) + 1);
    int i=0;
    int j=0;
    while (i < strlen(input))
    {
        if (((input[i]) >= 65 && (input[i]<=90)) || ((input[i]>=97) && (input[i]<=122)))
        {
            new_str[j]= toupper(input[i]);
            i++;
            j++;
        }
        else i++;
    }
    return new_str;
}

int main()
{
    char str_1[100];
    char str_2[100];
    printf("Enter first word: ");
    fgets(str_1, sizeof(str_1), stdin);
    printf("Enter second word: ");
    fgets(str_2, sizeof(str_2), stdin);


    char *up_str_1 =(char *) malloc(strlen(str_1) + 1);
    char *up_str_2 =(char *) malloc(strlen(str_2) + 1);

    up_str_1= remove_up(str_1);
    up_str_2= remove_up(str_2);
    printf("%s", up_str_1);
    printf("\n");
    printf("%s", up_str_2);
    return 0;
}

4 个答案:

答案 0 :(得分:4)

有一些问题,但因为这是标记的家庭作业,我会指出它们但不会给你答案。

首先,这不符合您的想法:

int i, j = 0;

j将被初始化,但我可能不会从0开始。你需要将i初始化为0。

接下来,有一个错字 - 您在]错过了结束(input[i<=122)

最后,根据您对问题的回答,您可能无法打印结果:查找printf()cout或您希望用于输出值的任何内容。

答案 1 :(得分:1)

它不会打印结果,因为您没有使用任何打印语句来显示调用remove_up的内容。

要了解remove_up函数中发生了什么,您需要理解这一点:

http://www.asciitable.com/

此代码:

if (((input[i]) >= 65 && (input[i]<=90)) || ((input[i]>=97) && (input[i<=122)))

检查字符是否是这两个范围之间的ascii字符集中的字母字符。看看上面的链接。如果它在此集合中,则将其转换为高位(冗余数据的一半)并将结果保存在新malloc的字符串中。

问题:  你永远不会在“new_str”中设置一个空终止符  2.你似乎永远不会释放任何东西(虽然在这段代码中它是微不足道的,在实际代码中你可能会产生问题,即内存泄漏)。  3.“i”在while循环中是多余的。这是在if和else ......  4.重新思考你如何使用malloc(你可能不希望在自定义函数中使用它,除非你要自己清理)

我可能缺少更多,但这可以帮助你看到一些问题。

答案 2 :(得分:0)

仔细检查您对parenths的使用 - 您需要的不仅仅是。你在if语句中也缺少']'。惊讶它编译。<​​/ p>

答案 3 :(得分:0)

int i, j = 0;更改为int i = 0, j = 0;。您的i初始化时垃圾值大于strlen(input),因此从未进入while循环。