簡體   English   中英

函數和字符串

[英]Function and strings

我是C語言的新手,已經開始學習字符串。 我想創建一個名為

void SpaceRemover(char *input )

它應該從給定的具有大量空間的字符串數組中刪除空格

到目前為止,我已經生成的代碼刪除了所有空格,並且沒有提供我想要的輸出。 誰能幫我這個?

char* SpaceRemover(char *input){
    char *output=input;
    for (int i = 0, j = 0; i<strlen(input); i++,j++)
    {
        if (input[i]!=' ')   
            output[j]=input[i]; 
        else
            j--;   
     }
     return output;
}

我做了這個,但是我知道它是錯誤的,並且沒有做我想要的,但是老實說,這就是我能做到的-_-

問題是您刪除了所有空格。

char *SpaceRemover(char *name){
  char *output = name;
  int j = 0;

  for (int i = 0; i < strlen(name); i++) {
    if (name[i] != ' ' || (name[i] == ' ' && name[i + 1] != ' ') {  
      output[j] = name[i];
      j += 1; 
    }
  }
  output[j] = '\0'
  return output;
  }

這種情況應該讓一個空間通過。
您可能會注意到我用char *替換了void返回類型,因此要使用該函數,您將需要使用:

name = SpaceRemover(name);

你可以做如下

void SpaceRemover(char *name)
{
  int i=0,j=0;

  for (i = 0;i<strlen(name);i++)
   {
           if (name[i] != ' ' || (name[i] == ' ' && name[i+1] != ' ' && j!= 0))
           {
                   name[j++] = name[i];
           }
  }
  name[j]='\0'; //Terminate the string to avoid junk chars 
}

哪里

if (name[i] != ' ' || (name[i] == ' ' && name[i+1] != ' ' && j != 0))

僅當當前字符不是空格或當前字符是空格且下一個字符不是空格時才可以復制(在開頭包括單個空格)。

同樣不要忘記終止string

name[j]='\0';

當遇到空間時,我將使用標記來激活。

如果您也想刪除前導空格和尾隨空格,則可能需要進行調整。

將在輸出中添加一個空格,該標志將用於避免添加下一個空格。 當遇到空格以外的其他內容時,該標志將被停用。

正如Alex在評論中所述,不建議在for語句中遞增j時遞減j。

我會在for循環中復制每個字符,而不是過濾預先復制的輸出。

char space_found = 0;
char *output = malloc(sizeof(char) * (strlen(name) + 1));
int j = 0;
for (int i = 0; i < strlen(name); ++i)
{
    if (name[i] == ' ' and space_found == 0)
    {
        space_found = 1;
        output[j++] = name[i];
    }
    if (name[i] != ' ')
    {
        space_found = 0;
        output[j++] = name[i];
    }
}
output[j] = '\0';
void spaceRemover(char* str)
{
    char temp[50] = {0};
    int j = 0; 
    strncpy(temp, str, strlen(str) + 1);
    for(int i = 0; i < strlen(str); i++)
    {
        if(temp[i] != ' ')
        {
            str[j] = temp[i];
            j++;
        }   
    }
    str[j] = 0;
}

如果您有任何疑問,請隨時提問,祝您好運

#include <stdio.h>

char *rem(char *str)
{
   char *cur=str;
   char *nex=str;

   while(*nex)
   {
      if(*nex == ' ') nex++;
      else *cur++ = *nex++;
   }
   *cur=0;
   return str;
}

int main(void) {
    char z[]=" etc def etc    def ";
    printf("%s\n", rem(z));
    return 0;
}

暫無
暫無

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

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