我希望用户输入一个字符串,然后只保留字母。我的问题是函数str在第二个while循环中,它从不将字母复制到另一个字符串中,它甚至不打印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;
  }

最佳答案

你不需要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')

08-16 10:01