C 读字符串,只保留字母
我希望用户输入一个字符串,然后只保留字母。我的问题是在第二个循环中的str函数中,它从不将字母复制到另一个字符串。它甚至不打印j!我真的不知道为什么会这样C 读字符串,只保留字母,c,string,pointers,C,String,Pointers,我希望用户输入一个字符串,然后只保留字母。我的问题是在第二个循环中的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') {
#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;
}
#包括
#包括
#包括
void str(char*s)
{
int i=0,j=0;
整数和=0;
char*outsr;
而(s[i]!='\0')
{
如果(s[i]>='a'和&s[i]='a'和&s[i]='a'和&s[i]='a'和&s[i]您不需要strcpy函数:
strcpy(outstr[j],s[i]);
但是
够了,还有改变
s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'
s[i]>='a'和&s[i]='a'和&s[i]='a'和&s[i]='a'和&s[i]您不需要strcpy函数:
strcpy(outstr[j],s[i]);
但是
够了,还有改变
s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'
s[i]>='a'和&s[i]='a'和&s[i]='a'和&s[i]='a'和&s[i]您不需要strcpy函数:
strcpy(outstr[j],s[i]);
但是
够了,还有改变
s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'
s[i]>='a'和&s[i]='a'和&s[i]='a'和&s[i]='a'和&s[i]您不需要strcpy函数:
strcpy(outstr[j],s[i]);
但是
够了,还有改变
s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'
s[i]>='a'和&s[i]='a'和&s[i]='a'和&s[i]='a'和&s[i]您应该尽可能使用标准的c库例程。例如,您可以使用
isalpha检查字符是否为字母。您应该尽可能使用标准c库例程。例如,您可以使用函数
isalpha检查字符是否为字母。您应该尽可能使用标准c库例程。例如,您可以使用函数
isalpha检查字符是否为字母。您应该尽可能使用标准c库例程。例如,您可以使用函数
我会检查一个字符是否是字母。并避免使用get()
,因为如果输入651个字符,那么您将得到的只是缓冲区溢出和未定义的行为。尽管您的代码中不需要strcpy()
,但当您需要它时,最好使用他的弟弟strncpy()
限制复制的长度。我知道gets,但我现在想要一些快速的东西。请避免使用gets()
,因为如果您输入651个字符,那么您将得到的只是缓冲区溢出和未定义的行为。而且您不需要strcpy()
在您的代码中,当您需要它时,更喜欢使用他的小弟弟strncpy()
来限制复制的长度。我知道gets,但我现在想要一些快速的东西。请避免使用gets()
,因为如果您输入651个字符,那么您将得到的只是缓冲区溢出和未定义的行为。虽然您的代码中不需要strcpy()
,但当您需要它时,更愿意使用他的弟弟strncpy()
限制复制的长度。我知道gets,但我现在想要一些快速的东西。请避免使用gets()
,因为如果您输入651个字符,那么您将得到的只是缓冲区溢出和未定义的行为。而且您不需要strcpy()
在您的代码中,当您需要它时,更愿意使用他的弟弟strncpy()
来限制复制的长度。我知道gets,但我现在想要一些快速的东西。