2012-02-10 60 views
-1

该程序应该删除除字母之外的所有内容,并创建一个只有大写字母的新字符串。无法弄清楚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; 
} 
+1

你的代码似乎已经通过'main'的定义中断了。 。 。 – ruakh 2012-02-10 23:40:19

+0

你的程序有几个问题,但你似乎没有把整个事情放在这里。 – 2012-02-10 23:41:34

+0

对不起,我已经发布了整个事情。除了返回0之外没有任何东西丢失;和括号。但请让我知道它是什么。 – 2012-02-10 23:42:40

回答

0

仔细检查您的parenths的使用 - 你有超过需要。你在这个if语句中也缺少']'。惊讶它编译。

+0

它不能编译。 – 2012-02-10 23:57:29

+0

对不起,这是一个错误,当我复制并粘贴到这里...当我在我的IDE编译时,正确输入所有括号。 – 2012-02-11 00:01:45

+0

感谢您的帮助......我已经想通了:)...我应该关闭这个帖子...? – 2012-02-11 00:15:21

4

有几个问题,但因为这是标记作业,我会指出他们,但不给你答案。

首先,这不会做你认为:

int i, j = 0; 

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

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

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

+2

这是C,所以他不能使用cout。但是,他显然给了它一个.cpp扩展名,因为他声明了up_str_1和up_str_2,而不是在main()的开头。 – 2012-02-10 23:59:06

+0

对不起,我了解并修复了其他问题,但我不明白你的最后一点 – 2012-02-10 23:59:12

+0

它仍然无法正常工作....:S – 2012-02-11 00:01:03

0

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

1

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

要了解什么是你remove_up功能回事,你需要明白这一点:

http://www.asciitable.com/

此代码:

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

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

问题: 1.你从来没有在“new_str”设置一个空终止 2.你似乎从来没有释放任何东西(虽然在此代码是微不足道的,在真正的代码,你可以创建一个问题,即内存泄漏)。 3.“我”在while循环中是多余的。它在if和else ... 4.重新思考你如何使用malloc(你可能不想在你的自定义函数中以这种方式使用它,除非你打算自己清理)

可能有更多的我错过了,但这应该会帮助你看到一些问题。