我正在尝试编写一个代码,要求用户输入一个字符串并删除除字母之外的所有字符。
现在我自己做了,似乎没有正常工作。我是字符串的新手所以我正在努力理解和掌握字符串。我试图在Mac上使用gdb,但我没有所有的功能来理解这一点。 你能帮忙吗?
代码必须做什么:用户输入(例如):h**#el(l)o&^w
,输出为hello.
这是我的代码:
#include <stdio.h>
#include <string.h>
int main()
{
char string[100];
int i;
int seen = 0;
printf("Enter String: ");
scanf("%s", string);
for (i=0; string[i]!='\0'; i++)
{
if (((string[i]<='a' || string[i]>'z')&&(string[i]<='A' || string[i]>'Z')) ||string[i]!='\0')
{
seen = 1;
}
else
seen = 0;
}
if (seen==0)
{
printf("%s", string);
}
}
答案 0 :(得分:0)
嗯,您的代码有几个重要问题:
scanf("%s", …)
is considered dangerous, for the same reasons 所以基本上,你想要的是使用fgets()
而不是scanf()
。
但为什么不按字符获取输入字符,并构建一个只有你想要的字符的字符串?它更简单灵活!
基本上是:
#include <ctype.h>
int main() {
char* string[100];
int i=0;
printf("Enter your string: ");
do {
// getting a character
char c = getchar();
// if the character is alpha
if (isalpha(c) != 0)
// we place the character to the current position and then increment the index
string[i++] = c;
// otherwise if c is a carriage return
else if (c == '\r') {
c = getchar(); // get rid of \n
// we end the string
string[i] = '\0'
}else if (c == '\n')
// we end the string
string[i] = '\0';
// while c is not a carriage return or i is not out of boundaries
} while (c != '\n' || i < 100);
// if we've got to the boundary, replace last character with end of string
if (i == 100)
string[i] = '\0';
// print out!
printf("Here's your stripped string: %s\n", string);
return 0;
}
我没有在我的电脑上运行,因为它已经迟到了,所以我在出错时道歉。
附录:
程序会跳过我的陈述并关闭
这是因为您的条件被反转,并删除了\0
条件,因为scanf()
始终会将\0
附加到字符串以结束它。尝试交换seen = 1
和seen = 0
或尝试使用以下条件:
if ((string[i]>='a' && string[i]<='z')||(string[i]>='A' && string[i]<='Z')))
seen = 1;
else
seen = 0;
或简单地说,使用ctypes
的{{1}}函数,就像我们的两个例子一样!
答案 1 :(得分:0)
没有任何部分(删除多余的字符)来更改代码中的字符串。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char *filter(char *string, int (*test)(int)) {
char *from, *to;
for(to = from = string;*from;++from){
if(test(*from))
*to++ = *from;
}
*to = '\0';
return string;
}
int main(){
char string[100];
printf("Enter String: ");
scanf("%99s", string);
printf("%s\n", filter(string, isalpha));
return 0;
}