2017-01-29 2 views
2

Как заменить пробел на новую строку ("\ n") в строке с помощью C?Как заменить пространство новой строкой?

+0

Ваш вопрос недостаточно точен: в каком контексте вы хотите заменить пространство новая линия? Вы читаете файл? сканирование строки? – chqrlie

+0

... тоже какой * точно * считаете ли вы «* новой линией»? – alk

+0

@chqrlie Лучше? Я создал этот вопрос, потому что я прочитал аналогичный вопрос, однако у него не было простого прямого прямого ответа, а также в его вопросе его код был грязным и имел переменные, которые не были нужны. –

ответ

2

Ваш вопрос довольно расплывчатым.

Вот упрощенным фильтр, чтобы изменить все пробелы во входном потоке в новой строкой:

#include <stdio.h> 

int main(void) { 
    int c; 

    while ((c = getchar()) != EOF) { 
     putchar(c == ' ' ? '\n' : c); 
    } 
    return 0; 
} 

EDIT:

Если вы заинтересованы в изменении строки, вы должны знать, что строка литералы не изменяются, попытка их изменения имеет неопределенное поведение.

Вы должны найти символы пробела и сохранить символы новой строки ('\n') при соответствующих смещениях.

Вы можете использовать указатель и strchr() функцию:

char *p = strchr(string, ' '); 
if (p != NULL) { 
    *p = '\n'; 
} 

Handling все пробелы в цикле:

for (char *p = string; (p = strchr(p, ' ')) != NULL; p++) { 
    *p = '\n'; 
} 

Или вы можете использовать for цикл с индексной переменной:

for (size_t i = 0; string[i] != '\0'; i++) { 
    if (string[i] == ' ') { 
     string[i] = '\n'; 
     //break; // uncomment the break if you want a single space changed 
    } 
} 
+0

Хороший ответ его немного более простой, чем мой. –

+0

Как насчет некоторой дополнительной проверки ошибок/регистрации, например 'if ((c == EOF) && ferror (stdin)) {perror (" getchar() failed ");}' сразу после 'while'-loop ...: -) – alk

+0

@alk: 'getchar()' действительно возвращает 'EOF' как для конца файла, так и для ошибки чтения. Большинство программ-примеров unix блаженно игнорируют случай ошибки. Если вы хотите иметь дело с этим, ваше предложение будет прекрасным, но должно быть завершено с эквивалентными тестами на 'putchar()' и проверкой окончательного 'fflush (stdout)', что приведет к громоздкому коду с плохой педагогической ценностью. Лучшая обработка ошибок вызовет другой подход с явной буферизацией. – chqrlie

4
#include <stdio.h> 
#include <string.h> 
#define SIZE 50 

int main(int argc, char **argv) 
{ 
    char string[] = "this is my string"; 
    size_t length, c; 

    length = strlen(string); 

    for(c = 0; c < length; ++c) 
    { 
      if(string[c] == ' ') 
      { 
       string[c] = '\n'; 
      }  
    } 

    printf("%s\n", string); 

    return 0; 
} 
+0

Я думаю, что это должно быть 'c neoaggelos

+1

Конец строки может содержать пробел, но тогда в большинстве случаев вы получите двойную новую строку, так что измените ее. Приветствия для подсказки –

+0

'strlen()' возвращает 'size_t' не' int'. Поэтому 'c' и' length' должны быть действительно 'size_t'. – alk

1

Простая программа:

int c;//return of fgetc type is int 

while(EOF!=(c=fgetc(file))) 
    putchar(c == ' ' ? '\n ' : c); 
+0

OP спрашивает * Как заменить пробел новой строкой в ​​c *, а не * Как заменить все пробелы новыми строками * – chqrlie

+0

@chqrlie: Возможно, выполнив: 'program out.txt' – alk

+1

Thats очевидно ваш предположение ... но я думаю, что вы должны написать 'while ((c = fgetc (файл))! = EOF) putchar (c == ''? '\ n': c);' – chqrlie

Смежные вопросы