簡體   English   中英

C語言從給定字符串中刪除前面的空格和制表符

[英]Remove preceding spaces and tabs from a given string in C language

哪個 C 函數(如果有)從字符串中刪除所有前面的空格和制表符?

在 C 中,字符串由指針標識,例如char *str ,或者可能是數組。 無論哪種方式,我們都可以聲明我們自己的指向字符串開頭的指針:

char *c = str;

然后我們可以讓我們的指針移過任何類似空格的字符:

while (isspace(*c))
    ++c;

這將向前移動指針,直到它不指向空格,即在任何前導空格或制表符之后。 這使原始字符串保持不變——我們只是改變了指針c指向的位置。

您將需要此包含來獲取isspace

#include <ctype.h>

或者,如果您樂於定義自己對什么是空白字符的想法,您可以只寫一個表達式:

while ((*c == ' ') || (*c == '\t'))
    ++c;

修剪空白的更簡單的功能

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

char * trim(char * buff);

int main()
{
    char buff[] = "    \r\n\t     abcde    \r\t\n     ";
    char* out = trim(buff);
    printf(">>>>%s<<<<\n",out);
}

char * trim(char * buff)
{
    //PRECEDING CHARACTERS
    int x = 0;
    while(1==1)
    {
        if((*buff == ' ') || (*buff == '\t') || (*buff == '\r') || (*buff == '\n'))
            { 
                x++;
                ++buff;
            }
        else
            break;
    }
    printf("PRECEDING spaces : %d\n",x);
    //TRAILING CHARACTERS
    int y = strlen(buff)-1;
    while(1==1)
    {
        if(buff[y] == ' ' || (buff[y] == '\t') || (buff[y] == '\r') || (buff[y] == '\n'))
            { 
                y--;
            }
        else
            break;
    }
    y = strlen(buff)-y;
    printf("TRAILING spaces : %d\n",y);
    buff[strlen(buff)-y+1]='\0';
    return buff;
}
void trim(const char* src, char* buff, const unsigned int sizeBuff)
{
    if(sizeBuff < 1)
    return;

    const char* current = src;
    unsigned int i = 0;
    while(current != '\0' && i < sizeBuff-1)
    {
        if(*current != ' ' && *current != '\t')
            buff[i++] = *current; 
        ++current;
    }
    buff[i] = '\0';
}

你只需要給buff足夠的空間。

您可以設置一個計數器來計算相應的空格數,並相應地將字符移動那么多空格。 其復雜性最終為O(n)

void removeSpaces(char *str) {
    // To keep track of non-space character count
    int count = 0;

    // Traverse the given string. If current character
    // is not space, then place it at index count
    for (int i = 0; str[i]; i++)
        if (str[i] != ' ')
            str[count++] = str[i]; // increment count
    str[count] = '\0';
}

暫無
暫無

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

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