该程序应该删除除字母之外的所有内容并创建一个新字符串,该字符串只包含大写字母。
但是,它不会打印结果。
以下是代码:
#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;
}
答案 0 :(得分:4)
有一些问题,但因为这是标记的家庭作业,我会指出它们但不会给你答案。
首先,这不符合您的想法:
int i, j = 0;
j将被初始化,但我可能不会从0开始。你需要将i初始化为0。
接下来,有一个错字 - 您在]
错过了结束(input[i<=122)
。
最后,根据您对问题的回答,您可能无法打印结果:查找printf()
或cout
或您希望用于输出值的任何内容。
答案 1 :(得分:1)
它不会打印结果,因为您没有使用任何打印语句来显示调用remove_up的内容。
要了解remove_up函数中发生了什么,您需要理解这一点:
此代码:
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
循环。