Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
33 / 32 / 7
Регистрация: 13.12.2010
Сообщений: 342

Удалить пробел перед точкой

13.10.2011, 16:49. Показов 4667. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вводится текст - необходимо удалить все пробелы перед точкой(запятой).

Понимаю, что нужно сделать примерно так:

C++
1
2
3
4
5
6
7
8
9
10
string sentence;
 
getline(cin, sentence);
 
int i = 0;
while(sentence[i] == ' ' && sentence[i+1] == '.'){
удалить после i;
}
strstr(sentence, ' .');
и потом все объединяем в один новый массив;
Возник вопрос, как удалить часть массива после определенного условия.
пробовал
sentence.delete(i, 1);
но не катит
Подскажите, пожалуйста, что мне поможет в данной ситуации.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.10.2011, 16:49
Ответы с готовыми решениями:

Как на языке "С" удалить в строке все цифры 3 перед первой точкой и заменить все '+' после певрой точки на '-'?
Помогите плиз...

отсутствие точки-запятой перед точкой (ООП)
Недавно начемл изучать ООП мог напортачить( Короче в майне я создаю матрицу двойную. В классе матр я создаю 3 функции matrsort...

классы, что пишется перед точкой с запятой?
class example { ... }//перед точкой с запятой иногда что-то пишут, какие-то переменные, что они значат? ...;

13
Кошковед
 Аватар для co6ak
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
13.10.2011, 16:56
а обязательно в массив записывать или можно просто на экран выплюнуть?
0
33 / 32 / 7
Регистрация: 13.12.2010
Сообщений: 342
13.10.2011, 16:59  [ТС]
вообщем есть такая прога
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <string.h>
 
using namespace std;
 
int main()
{
    string sentence;
 
    getline(cin, sentence);
 
    cout << endl;
 
    if(islower(sentence[0]) != 0){
        cout << "Nachalo pervogo predlogeniya s malenkoy bukvi!" << endl;
        sentence[0] = toupper(sentence[0]);
    }
 
    int i = 1;
  
    while(sentence[i] != '\0'){
        if((sentence[i - 1] == '.' || sentence[i - 1] == '!' || sentence[i - 1] == '?') && sentence[i] != ' ' && sentence[i] != '\0'){
            cout << i << " Otsutstvuet probel!" << endl;
            sentence.insert(i, 1, ' ');
        }
        if((sentence[i - 2] == '.' || sentence[i - 2] == '!' || sentence[i - 2] == '?')  && sentence[i - 1] == ' ' && islower(sentence[i]) != 0){
            cout << i << " Malenkaia bukva!" << endl;
            sentence[i] = toupper(sentence[i]);
        }
        if(sentence[i] != '.' && sentence[i] != ',' && sentence[i + 1] == ' ' && sentence[i + 2] == 'a' && sentence[i + 3] == ' '){
            cout << i << " Otsutstvuet zapyataya!" << endl;
            sentence.insert(i + 1, 1, ',');
        }
        if(sentence[i] != '.' && sentence[i] != ',' && sentence[i + 1] == ' ' && sentence[i + 2] == 'n' && sentence[i + 3] == 'o' && sentence[i + 4] == ' '){
            cout << i << " Otsutstvuet zapyataya!" << endl;
            sentence.insert(i + 1, 1, ',');
        }
        if(sentence[i - 1] == ',' && sentence[i] != ' '){
            cout << i << " Otsutstvuet probel posle zapyatoy!" << endl;
            sentence.insert(i, 1, ' ');
        }
        if(sentence[i] == ' ' && sentence[i+1] == '.'){
         
        }
 
 
        i++;
    }
   
    int length = 0;
 
    const char* str_ptr = sentence.c_str();
 
    length =  strlen(str_ptr);
 
    if(sentence[length - 1] != '.'){
            cout << "Otsutstvuet tochka v poslednem predlogenie!" << endl;
            sentence.insert(length, 1, '.');
    }
 
    cout << endl << sentence << endl << endl;
 
    cin.get();
 
    return 0;
}
Хочу попробовать еще реализовать вышеописанную функцию
0
 Аватар для nikola166
10 / 10 / 1
Регистрация: 18.03.2010
Сообщений: 142
13.10.2011, 16:59
просто скопируйте часть массива в другой массив
1
33 / 32 / 7
Регистрация: 13.12.2010
Сообщений: 342
13.10.2011, 17:02  [ТС]
Млин, а все-то на поверхности
0
 Аватар для nikola166
10 / 10 / 1
Регистрация: 18.03.2010
Сообщений: 142
13.10.2011, 17:03
конечно))))
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.10.2011, 17:10
Цитата Сообщение от ViT(Vet@l) Посмотреть сообщение
sentence.delete(i, 1);
C++
1
sentence.erase(sentence.begin() + i);
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
13.10.2011, 17:12
можно пройтись по строке с другой стороны. так легче убирать проблеы.
ток че не нравится - реверз в конце...

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
25
26
27
28
    std::string s = "qweqweqw , qweqweqwe    qwe   qweqwe \
qwe   . qweqwqwe . qweqweqw . qwe.,., qweqw.";
 
    std::string new_s;
 
    bool flag=false;
 
    for (std::string::reverse_iterator rit=s.rbegin(); rit!=s.rend(); rit++) {
        
        if (*rit=='.' || *rit==',') {
            flag = true;
            new_s+=*rit;
            continue;
        }
 
        if (flag) {
            if (*rit== ' ')
                continue;
        }
 
        new_s+=*rit;
        flag=false;
        
    }
 
    std::reverse(new_s.begin(),new_s.end());
 
    std::cout << new_s;
хотя можно проще.
считать пробелы и если после них идёт символ разделитель не писать их. если не символ разделитель записать их в строку.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
13.10.2011, 17:30
Надо делать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int  main(void) {
 int temp= getchar ();
 
 while (temp!= '.'&&temp!= 10) {
  if (temp!=' ')
   printf ("%c", temp);
  temp= getchar ();
 }
 
 if (temp== '.')
 while ((temp= getchar())!=10) {
  printf ("%c", temp);
 }
 
 getchar (); 
 return 0;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
13.10.2011, 17:38
Цитата Сообщение от kravam Посмотреть сообщение
Надо делать так:
Code
1
2
3
C:\c_cpp\shitcode>kravam_point.exe
bla , bla , bla .
bla,bla,bla
0
13.10.2011, 17:43

Не по теме:

kravam, делай горизонтальные отступы больше, глаза ж сломать можно

0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
13.10.2011, 17:56
Прошу прощения, надо так:
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
25
#include <stdio.h>
 
int main(void)
{
    int temp = getchar ();
    
    while (temp!= '.'&&temp!= 10)
    {
    if (temp!=' ')
        printf ("%c", temp);
    temp= getchar ();
    }
    
    if (temp== '.')
    {
    printf ("%c", temp);
    while ((temp= getchar())!=10)
    {
        printf ("%c", temp);
    }
    }
 
    getchar (); 
    return 0;
}
Короче я не умею код редактировать

 Комментарий модератора 
fixed
0
33 / 32 / 7
Регистрация: 13.12.2010
Сообщений: 342
13.10.2011, 21:46  [ТС]
А почему нельза вот так:
C++
1
2
3
4
5
6
if(sentence[i] == ' ' && sentence[i + 1] == '.'){
            char* strncpy(char* sentence1, const char* sentence, size_t i);
            char* strstr(char* str, char* sentence);
            char* strcat(char* sentence1, const char* sentence);
 
        }
0
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.10.2011, 08:28
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
25
26
27
28
29
#include <stdio.h>
#include <string.h>
 
char* str_erase(char* str, char ch, char* to) {
   char* tmp = str;
   int  size;
   char* sa, *sb;
   while(*str) {
        if(*str == ch) {
            for(sb = str; *sb == ch; *sb++);
            size = sb - str;
            if(strchr(to, *sb)) {
                 while(size--)
                     for(sa = str, sb = str + 1; *sa; *sa++ = *sb++);
            } else
                  str += --size;
            }
            *str++;
   }
   return tmp;
}
 
int  main(void) {
   char str[128] = "   .bla    , bla    , bla    . kop    ,";
   // gets(str);
   puts( str_erase(str, ' ', ",.") );
   getchar();
   return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.10.2011, 08:28
Помогаю со студенческими работами здесь

[codestyle]Пробел перед открывающейся скобкой
Всем добрый день. Я заметил, что ставлю пробелы перед скобками на автомате. Например, в вызове функции пробел не использую, в то время,...

Перенести часть строки в конец предложения перед точкой
Здравствуйте. Требуется в данном тексте: Если разложить поле на монохроматические составляющие (каждая с определенной длиной...

Заменить все строчные символы, стоящие перед точкой, заглавными
Дана строка символов, разделенные «точкой» и «запятой». Замените все строчные символы, стоящие перед «точкой», заглавными символами.

Строка: вставить пробел перед каждой заглавной буквой
Вводится строчка, например, HaveaNiceDay. Нужно чтобы выводилось Havea Nice Day, то есть перед заглавной буквой ставится пробел. Как...

Вывести на экран слова перед которыми стоят запятая и пробел.
Вывести на экран слова перед которыми стоят запятая и пробел. Не могу понять как ее реализовать чайниг в этом деле) Добавлено через 6...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru