无法弄清楚C编程
该程序应该删除除字母之外的所有内容,并创建一个只有大写字母的新字符串。无法弄清楚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;
}
仔细检查您的parenths的使用 - 你有超过需要。你在这个if语句中也缺少']'。惊讶它编译。
它不能编译。 – 2012-02-10 23:57:29
对不起,这是一个错误,当我复制并粘贴到这里...当我在我的IDE编译时,正确输入所有括号。 – 2012-02-11 00:01:45
感谢您的帮助......我已经想通了:)...我应该关闭这个帖子...? – 2012-02-11 00:15:21
有几个问题,但因为这是标记作业,我会指出他们,但不给你答案。
首先,这不会做你认为:
int i, j = 0;
Ĵ将被初始化,但我可能不会从0开始。你需要我初始化为0为好。
接下来,有一个错字 - 您错过了关闭]
在(input[i<=122)
。
最后,根据您对问题的回答,您可能无法打印结果:查找printf()
或cout
或您希望用于输出值的任何内容。
这是C,所以他不能使用cout。但是,他显然给了它一个.cpp扩展名,因为他声明了up_str_1和up_str_2,而不是在main()的开头。 – 2012-02-10 23:59:06
对不起,我了解并修复了其他问题,但我不明白你的最后一点 – 2012-02-10 23:59:12
它仍然无法正常工作....:S – 2012-02-11 00:01:03
变化int i, j = 0;
变为int i = 0, j = 0;
。您的i
已初始化为垃圾值大于strlen(input)
,因此从未进入while
循环。
它不打印结果,因为您没有使用任何打印语句来显示从您的调用remove_up回来的内容。
要了解什么是你remove_up功能回事,你需要明白这一点:
此代码:
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(你可能不想在你的自定义函数中以这种方式使用它,除非你打算自己清理)
可能有更多的我错过了,但这应该会帮助你看到一些问题。
你的代码似乎已经通过'main'的定义中断了。 。 。 – ruakh 2012-02-10 23:40:19
你的程序有几个问题,但你似乎没有把整个事情放在这里。 – 2012-02-10 23:41:34
对不起,我已经发布了整个事情。除了返回0之外没有任何东西丢失;和括号。但请让我知道它是什么。 – 2012-02-10 23:42:40