读一个字符串,只保留字母

时间:2014-02-02 14:21:13

标签: c string pointers

我希望用户输入一个字符串,然后只保留字母。我的问题是在第二个while循环中的函数str,它将字母复制到另一个字符串。它甚至不打印j!我真的不知道为什么会这样。

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

void str(char *s)
{
  int i=0,j=0;
  int sum=0;

  char *outstr;
  while(s[i]!='\0')
     {
       if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
        sum++;
      i++;
     }
   i=0;
   outstr=(char*)malloc(sum*sizeof(char));
   while(s[i]!='\0')
    {
      if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
         {
            strcpy(outstr[j],s[i]);
            j++;
            printf("\nj=%d",j);
         }

        printf("\ni=%d",i);
        i++;

    }


    printf("%s",outstr);
}

int main()
  {
     char s[650];
     int n;
     gets(s);
     str(s);

     return 0;
  }

2 个答案:

答案 0 :(得分:2)

你不需要strcpy函数:

strcpy(outstr[j],s[i]);

outstr[j] = s[i];

就够了。并且还要改变

s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'

使用:

(s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z')

答案 1 :(得分:1)

您应尽可能使用标准c库例程。例如,您可以使用该功能 isalpha 检查字符是否为字母。