【发布时间】:2014-11-12 05:39:34
【问题描述】:
新字符串应仅包含现有字符串中相同顺序的字母字符。不应复制非字母字符。如果 s 是空指针,则返回空指针。
示例输入: “准备瞄准开火!” 输出: Readyaimfire
我不知道为什么在我的第一个 for 循环中,代码从不进入 if 语句。我也不确定我是否为新字符串正确分配了内存。感谢您的帮助:)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *alphabetic (const char *s);
char *alphabetic (const char *s)
{
char *newChar;
int i;
char n = 0;
long length = strlen(s);
for(i=0; i<length; i++)
{
if( (s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z') )
{
n++;
}
}
newChar = (char*)malloc(sizeof(char)*n);
for(i=0; i<length; i++)
{
if( (s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z') )
{
newChar[i] = s[i];
}
}
return newChar;
}
int main (void)
{
char *a, *b, *c;
a = alphabetic ("Ready... aim... fire!");
b = alphabetic ("***");
c = alphabetic ("*a*b*c*");
printf ("%s\n", a);
printf ("%s\n", b);
printf ("%s\n", c);
free(a);
free(b);
free(c);
return 0;
}
【问题讨论】:
-
您使用的是
char n = 0;,它应该是int类型。因为它没有分配内存。
标签: c string pointers char ascii