删除字符串的字符

时间:2014-01-29 23:47:47

标签: c string

我正在尝试编写一个代码,要求用户输入一个字符串并删除除字母之外的所有字符。

现在我自己做了,似乎没有正常工作。我是字符串的新手所以我正在努力理解和掌握字符串。我试图在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);
   }
}

2 个答案:

答案 0 :(得分:0)

嗯,您的代码有几个重要问题:

所以基本上,你想要的是使用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 = 1seen = 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;
}