如何从带有循环的字符串中删除字符?

时间:2018-12-17 17:43:26

标签: c string loops

我正在尝试使程序从用户放入的字符串中删除字符,但是在循环内出现错误。 (旁边的问题:是否在字符串中添加了一个字符,并做了一些小的改动,使“相同”代码?)

PS编程新手...

4 个答案:

答案 0 :(得分:0)

这是您要实现的目标吗?

更改:

  • getchar()和fgets()到scanf()
  • 添加了strlen()以获取字符串的长度
  • 将输入字符串的长度添加到printf
  • 添加了字符串的零初始化

注意:每次使用scanf()输入后,您必须按Enter键。

int main()
{      
    char str[100] = { 0 };
    char ch[5] = { 0 };
    int k, j;

    printf("Write text:\n");
    scanf("%s", str);

    printf("Input was: %s\nLength: %d\n", str, strlen(str));

    printf("Write a character that should be removed\n");
    scanf("%s", ch);

    for (k = 0, j = 0; k < strlen(str); k++)
    {
        if (str[k] != ch[0]) {
            str[j] = str[k];
            j++;
        }
    }
    str[j] = '\0';
    printf("String after removing a character: %s", str);
}

答案 1 :(得分:0)

这里有两个实现。两者都从字符串font-weight

中删除所有出现的char ch

第一个算法要快得多。第二个慢但容易理解的

str

#include <stdio.h>
#include <string.h>

char *removechar(char *str, int ch)
{
    char *cptr = str, *readptr = str;

    while(*readptr)
    {
        if(*readptr == ch)
        {
            readptr++;
        }
        else
        {
            *cptr++ = *readptr++;
        }
    }
    *cptr = 0;
    return str;
}

char *removechar(char *str, int ch)
{
    char *cpos = str;

    while((cpos = strchr(cpos, ch)))
    {
        strcpy(cpos, cpos + 1);
    }
    return str;
}

答案 2 :(得分:0)

您的代码有问题:

    如果str[k] != ch确实是一个字符而不是长度为5的字符数组,则
  1. ch将是一个有效的测试。这将比较str[k]的字符值地址为&ch[0]

  2. 如果k < str是在k初始化的char *指针而不是在循环索引开头的&str[0],则
  3. int将是有效的比较在0。

更正的代码:

int main(void) 
{
    char str[100];
    char ch[5];
    int k, j;

    printf("Write text:\n");
    //getchar();
    fgets(str, 100, stdin);

    printf("Input was: %s\n", str);

    printf("Write a character that should be removed\n");
    //getchar();
    fgets(ch, 5, stdin);

    for (k = 0, j = 0; k < strlen(str); k++)
    {
        if (str[k] != ch[0])
        {
            str[j] = str[k];
            j++;
        }
    }
    str[j] = '\0';
    printf("String after removing a character = %s", str);

    return 0;
}

答案 3 :(得分:-1)

这是您想要实现的吗?

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

int main(){
    char str[100],c;
    printf("Write text:\n");
    fgets(str,100,stdin);
    printf("Input was: %s\n", str);
    printf("Write a character that should be removed\n");
    c=getchar();
    for(int k=0;k<strlen(str);k++){
        if(str[k]==c){
            for(int j=k;j<strlen(str);j++){
                str[j]=str[j+1];
            }
        }
    }
     printf("String after removing a character = %s", str);
     return 0;
}