5

您好我试图从 C 字符串中删除一个字符,但输出似乎不正确。例如,如果。输入字符串=“Hello”指定要删除的字符=“l”我的输出是“HeXXo”。删除字符后,我似乎需要将值推入?

下面的代码:

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

void squeeze(char str[], char c);

void main (){
  char input[100];
  char c;
  printf("Enter string \n");
  gets(input);
  printf("Enter char \n");
  scanf("%c", &c);
  printf("char is %c \n", c);
  squeeze(input , c );

  getchar();
  getchar();
  getchar();
}

void squeeze(char str[], char c){
    int count = 0, i = 0;   

    while (str[count] != '\0'){
      count++;
    }

    printf("Count = %d  \n", count);
    for ( i = 0 ; i != count; i++){
      if (str[i] == c){
            printf("Found at str[%d] \n", i);
            str[i] = "";
      }
    }
    printf(" String is = %s", str);
}
4

3 回答 3

5
str[i] = "";

您正在尝试分配指针而不是字符。您可能' '的意思是,但这也不是从字符串中删除字符的正确方法,而是替换它们。尝试:

char *p = str;
for (i = 0 ; i != count; i++) {
    if (str[i] != c)
        *p++ = str[i];
}
*p = 0;

编辑

这是我更喜欢的解决方案:

char *p = s; /* p points to the most current "accepted" char. */
while (*s) {
    /* If we accept a char we store it and we advance p. */
    if (*s != ch)
        *p++ = *s;

    /* We always advance s. */
    s++;
}
/* We 0-terminate p. */
*p = 0;
于 2013-10-08T07:49:23.443 回答
2
#include <stdio.h>
#include <stdlib.h>

void squeeze(char str[], char c);

int main ()
{
    char input[100];
    char c;
    printf("Enter string \n");
    gets(input);
    printf("Enter char \n");
    scanf("%c", &c);
    printf("char is %c \n", c);
    squeeze(input , c );

    return 0;
}

void squeeze(char str[], char c){
    int count = 0, i = 0,j=0;
    char str2[100];
    while (str[count] != '\0'){
        count++;}

    printf("Count = %d  \n", count);
    for ( i = 0,j=0 ; i != count; i++){
        if (str[i] == c)
        {
            printf("Found at str[%d] \n", i);
            //    str[i] = '';
        }
        else
        {
            str2[j]=str[i];
            j++ ;
        }
    }

    str2[j]='\0' ;
    printf(" String is = %s", str2);
}

这是您的代码的修改版本。我创建了一个新数组并将其余不匹配的字母放入其中。希望能帮助到你 。

于 2013-10-08T08:09:32.353 回答
0

str[i] = "";

您将字符串文字的地址分配给charat 位置i。首先,您应该得到编译器的警告,因为类型并不真正兼容;其次,您需要在那里分配一个替换字符,例如

str[i] = '_';

或者通过将所有后面的字符移回(从而覆盖要替换的字符)来实际删除它们。

于 2013-10-08T07:50:53.957 回答