Как удалить символ по заданному индексу из строки в C? - PullRequest
44 голосов
/ 28 марта 2011

Как мне удалить символ из строки?

Если у меня есть строка "abcdef" и я хочу удалить "b", как мне это сделать?

Удаление символа first легко с этим кодом:

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

int main()
{
   char word[] = "abcdef";
   char word2[10];

   strcpy(word2,&word[1]);

   printf("%s\n", word2);

   return 0;
}

и

strncpy(word2,word,strlen(word)-1);

даст мне строку без символа last , но я все еще не понял, как удалить символ в middle строки.

Ответы [ 19 ]

0 голосов
/ 14 июня 2015

Удобный, простой и быстрый способ избавиться от \ 0 - скопировать строку без последнего символа (\ 0) с помощью strncpy вместо strcpy:

strncpy(newStrg,oldStrg,(strlen(oldStrg)-1));
0 голосов
/ 28 марта 2011

Следующие должны сделать это:

#include <stdio.h>
#include <string.h>
int main (int argc, char const* argv[])
{
    char word[] = "abcde";
    int i;
    int len = strlen(word);
    int rem = 1;

    /* remove rem'th char from word */
    for (i = rem; i < len - 1; i++) word[i] = word[i + 1];
    if(i < len) word[i] = '\0';

    printf("%s\n", word);
    return 0;
}
0 голосов
/ 01 августа 2017

Это то, что вы можете искать, пока счетчик является индексом.

#include <stdio.h>

int main(){

    char str[20];
    int i,counter;
    gets(str);
    scanf("%d", &counter);

    for (i= counter+1; str[i]!='\0'; i++){
        str[i-1]=str[i];
    }
    str[i-1]=0;
    puts(str);



    return 0;
}
0 голосов
/ 07 ноября 2016
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 50
void dele_char(char s[],char ch)
{
    int i,j;

    for(i=0;s[i]!='\0';i++)
    {
        if(s[i]==ch)
        {
            for(j=i;s[j]!='\0';j++)
            s[j]=s[j+1];
            i--;
        }
    }
}

int main()
{
    char s[MAX],ch;
    printf("Enter the string\n");
    gets(s);
    printf("Enter The char to be deleted\n");
    scanf("%c",&ch);
    dele_char(s,ch);
    printf("After Deletion:= %s\n",s);
    return 0;
}
0 голосов
/ 05 августа 2016

Так я реализовал то же самое в c ++.

#include <iostream>
#include <cstring>

using namespace std;

int leng;
char ch;
string str, cpy;

int main() {
    cout << "Enter a string: ";
    getline(cin, str);
    leng = str.length();
    cout << endl << "Enter the character to delete: ";
    cin >> ch;
    for (int i=0; i<leng; i++) {
        if (str[i] != ch)
        cpy += str[i];
    }
    cout << endl << "String after removal: " << cpy;
    return 0;
}
0 голосов
/ 17 мая 2016

Это может быть один из самых быстрых, если вы передадите индекс:

void removeChar(char *str, unsigned int index) {
    char *src;
    for (src = str+index; *src != '\0'; *src = *(src+1),++src) ;
    *src = '\0';
}
0 голосов
/ 28 марта 2011

Используйте strcat() для объединения строк.

Но strcat() не допускает перекрытия, поэтому вам нужно создать новую строку для хранения вывода.

0 голосов
/ 28 марта 2011

Я пробовал с strncpy() и snprintf().

int ridx = 1;  
strncpy(word2,word,ridx);   
snprintf(word2+ridx,10-ridx,"%s",&word[ridx+1]);
0 голосов
/ 20 апреля 2013

Другое решение, использующее memmove () вместе с index () и sizeof ():

char buf[100] = "abcdef";
char remove = 'b';

char* c;
if ((c = index(buf, remove)) != NULL) {
    size_t len_left = sizeof(buf) - (c+1-buf);
    memmove(c, c+1, len_left);
}

buf [] теперь содержит "acdef"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...