簡體   English   中英

從C中的數組中刪除空格?

[英]Remove spaces from an array in C?

我試圖從我的數組“ secuencia”中刪除空格,用戶給了我這個條目:

“ 1 2 3 4 5 6 7 8 9”

我想刪除空格,並將其保存在另一個數組中以備后用。 然后,像我對數組“ palancas”和“ palancaroja”所做的那樣,用“ ATOI”轉換為整數。 那兩個數組只包含一個數字,所以我對它們沒有問題。

請幫助我...我正在用ANSI C編程。

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

int main(int argc, const char * argv[])
{
    char palancas [20000];
    int palancai;
    char palancaroja[10];
    int palancarojai;
    char secuencia[20000];
    char temp[20000];
    int j = 0;

    printf("Dame El Numero De Palancas:");
    fgets(palancas, 20000, stdin);

    printf("Dame La Posision De La Palanca Roja:");
    fgets(palancaroja, 10, stdin);

    palancai = atoi(palancas);
    palancarojai = atoi(palancaroja);

    printf("Dame La cadena");
    fgets(secuencia, 20000, stdin);

    for (int i = 0; i < palancai; i++) {

        if (secuencia [i] != ' ') {

        temp [i] = secuencia [i];


            printf("%s", temp);


        }
    }
}

這是從字符串中刪除空格的最簡單方法。

char *SourcePtr = secuencia;
char *TargetPtr = SourcePtr;

while (*SourcePtr != 0)
{
    if (*SourcePtr != ' ')
    {
       *TargetPtr = *SourcePtr;
       TargetPtr += 1;
    }
    SourcePtr += 1;
}
*TargetPtr = 0;

關鍵部分的翻譯版本

for (int i = 0; i < length; i++) {
    if (source[i] != ' ') {
        temp[i] = source[i];
        printf("%s", temp);
    }
}

此代碼將每個字符從數組source復制到數組temp ,但僅跳過空格。 因此,如果使用XXXXX初始化了temp ,並且sourceABC ,那么在執行循環之后, tempAXBXC

您使用了兩個索引(請參閱其他答案)

#include <stdio.h>

//copy to d from s removed space
void remove_space(char *d, const char *s){
    for(;*s;++s){
        if(*s != ' ')
            *d++ = *s;
    }
    *d = *s;
}

int main(){//DEMO
    char secuencia[] = "1 2 3 4 5 6 7 8 9";
    char temp[sizeof(secuencia)];
    remove_space(temp, secuencia);
    puts(temp);//123456789
    return 0;
}

您可以使用strtok並用定界符字符串為“”標記所獲得的字符串。

換一種說法:

char * tok;
int i = 0;
tok = strtok(secuencia, " ");
while(tok != NULL){
    temp[i] = tok[0];
    i++;
    tok = strtok(NULL, " ");
}

但是,只有在保證每個空格之間只有一位數字的情況下,這才起作用。 復制它的另一種方法是使用另一個循環,循環遍歷strtok直到到達'\\ 0'或使用strcpy。

首先,我認為您的for循環正在查看錯誤的變量。 您正在嘗試在palancai上循環播放,而實際上您想在secuencia循環播放。

在下面,您可以找到一個可以解析您的int的函數。

int MyIntParse(char* str)
{
    int iReturn = 0;
    for(int i=0;i<20000;++i)
    {
        iReturn *=10;
        switch(str[i])
        {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case '0':
                iReturn = iReturn + (str[i] - '0');
                break;
        }
    }
    return iReturn;
}

暫無
暫無

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

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