2012-07-10 6 views
-2

Я пытаюсь удалить пробелы из моего массива «secuencia», пользователи дают мне эту запись:Удалить пробелы из массива в C?

«1 2 3 4 5 6 7 8 9»

Я хочу, чтобы удалить пробелы и сохраните его в другом массиве позже. Затем преобразуйте в целое число с «ATOI», как я делаю с массивами «palancas» и «palancaroja». Эти два массива содержали только одно число, поэтому у меня не было проблем с ними.

, пожалуйста, помогите мне ... Я программирование в 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); 


     } 
    } 
} 
+1

Что вопрос? –

+3

Что такое ASCII C? – Dani

+0

@BenVoigt Вопрос в том, как я могу удалить пробелы для моего массива «secuencia» ?? этот код не работал ... Поскольку запись для массива «1 2 3 4 5 6 7 8 9» Я хочу удалить пробелы и сохранить их в другом массиве ... помогите мне пожалуйста. –

ответ

1

Это самый простой способ удалить пробелы из строки.

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

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

Вы знаете, что в этом коде 'secuencia',' SourcePtr' и 'TargetPtr' все указывают на то же место в памяти? – netcoder

+0

Мой код действительно работает, и он делает именно то, что я утверждал. –

+0

yeeah !! спасибо !, отлично работает;), –

0

Вы можете использовать strtok и разметить строку, которую вы получаете с ограничителем строковых быть «».

Другими словами:

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

Это будет работать только если это гарантирует, что это одна цифра между каждым пространством, хотя. Другим способом его копирования было бы использовать другой цикл, циклический переход через strtok до достижения «\ 0» или использование strcpy.

+0

* «Это будет работать, только если будет гарантировано, что это одна цифра между каждым пространством, но« * », а не« strcat »вместо простого назначения« tok [0] 'to temp [i]». – netcoder

1

Переведенный версия критической секции

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

Этот код копирует каждый символ из массива source в массив temp, а просто пропускает пробелы. Поэтому, если temp инициализирован XXXXX и source - A B C, то temp - AXBXC после выполнения цикла.

Вы должны использовать два индекса (см другой ответ)

0

первый я думаю, что ваш цикл смотрит на неправильной переменной. вы пытаетесь зациклиться на 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; 
} 
1
#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; 
} 
Смежные вопросы