Форум программистов, компьютерный форум CyberForum.ru

Удалить в строке лишние пробелы, оставив между словами ровно по одному - C++

Восстановить пароль Регистрация
 
Яродан
0 / 0 / 0
Регистрация: 25.12.2013
Сообщений: 12
29.11.2014, 17:56     Удалить в строке лишние пробелы, оставив между словами ровно по одному #1
Дана строка состоящая из слов, между которыми есть некое количество пробелов.
Требуется удалить лишние пробелы, оставив между словами ровно по одному.
Если в начале или в конце строки имеются пробелы, то точно так же нужно оставить лишь один из них.
Иными словами если пробелы повторяются 2 и более раз подряд, нужно убрать все кроме одного.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    char g[1000];
    gets(g);
    int i=1,k=0;
    for(;g[i];i++)
     if(g[i]==' ' && g[i-1]==' ');
     else  g[k++]=g[i-1];
    g[++k]=0;
    printf("%s",g);
    return 0;
}
Что у меня не так? При загрузке на сервер пишет Wrong Answer при первом тесте.

Добавлено через 50 минут
Решил обмануть сервер:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <conio.h>
#include <cstring>
 
using namespace std;
 
int main()
{
    char b = 0;
    char k;
    char h[1000];
    int i = 0;
    while (k!=char(13))
    {
    k = getch();
    if ((k==b && b!=' ') || (k!=b)){
    cout << k;
    h[i]=k;
    i++;
    }
    b=k;
    }
    cout << "\n" <<h;
}
Тобишь в этой версии программы, ввести 2 пробела подряд невозможно. А так как строка это введенное, то все по идее хорошо... ОДНАКО мне пришло: "Idleness Limit Exceeded, TestN=1"
Я так понимаю, что проблема в команде getchar(), которая реагирует на нажатие клавиши...
Что нужно поправить?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2014, 17:56     Удалить в строке лишние пробелы, оставив между словами ровно по одному
Посмотрите здесь:

В символьной строке удалить все лишние подряд идущие пробелы. C++
В символьной строке удалить все лишние подряд идущие пробелы. C++
Вывести на экран содержимое файла удалив лишние пробелы между словами C++
C++ Исключить лишние пробелы между словами (комментарии)
C++ Убрать в текстовом файле ненужные пробелы, оставив между словами по одному, между предложениями по два.
C++ Работа с файлами. Удалить все лишние пробелы, оставив между словами не более одного пробела
Строка: Удалить лишние пробелы между словами C++
Удалить лишние пробелы в строке C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,159
Завершенные тесты: 1
29.11.2014, 18:12     Удалить в строке лишние пробелы, оставив между словами ровно по одному #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    char g[1000];
    gets(g);
    int i=0,k=0;
    while(g[i++]==' ')
           ; // пропускаем пробелы в начале
    g[k++]=g[i++]; // переписали 1-ый символ
    for(;g[i];i++)
    {
         if(g[i]!=' ' ||  g[i-1]!=' ') // переписываем только если не пробел, или предыдущий не пробел
             g[k++]=g[i];
    }
     if(g[k-1]==' ') // последний пробел не нужен
            k--;
    g[k]=0; // конец строки
    printf("%s",g);
    return 0;
}
Yandex
Объявления
29.11.2014, 18:12     Удалить в строке лишние пробелы, оставив между словами ровно по одному
Ответ Создать тему
Опции темы

Текущее время: 17:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru