簡體   English   中英

在Unix中刪除C中的字符不起作用

[英]removing a character in C in Unix is not working

我正在嘗試從unix字符串中刪除字符'a',這是我的代碼

#include<stdio.h>
#include<string.h>
int main()
{
   char str[]= "123abcabc123";
   int i;
   for(i=0; i < strlen(str); i++)
   {
     if(str[i]=='a')
       str[i]='\b';
   }
   printf("str is %s\n",str);
   return 0;
}

我將輸出為12bbc123而不是"123bcbc123"

您不能在字符串中插入退格字符( '\\b' )並期望字符串縮小。

打印時它看起來可能更短,但是在內存中,它只是一個包含嵌入式退格字符的字符串。

您需要將字符移到要刪除的字符“后退”之后,即朝較低的索引移動,以便用字符串中的后繼字符覆蓋要刪除的字符,依此類推。 您可以為此使用memmove() ,但要注意長度。 我建議預先計算字符串長度。

您不能像執行操作那樣插入退格字符。 放松對此給出了很好的解釋。

您正在嘗試從字符串INPLACE中刪除字符,即不使用任何額外的內存。 您可以更改for循環,使其工作如下:

int j = 0;
for(i=0;i<strlen(str);i++)
{
   if(str[i]=='a')
   {
      continue;
   }
   str[j]=str[i];
   j++;
}
str[j]='\0';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM