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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
ViT(Vet@l)
27 / 26 / 2
Регистрация: 13.12.2010
Сообщений: 333
#1

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

13.10.2011, 16:49. Просмотров 1409. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2011, 16:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить пробел перед точкой (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
13.10.2011, 16:56 #2
а обязательно в массив записывать или можно просто на экран выплюнуть?
0
ViT(Vet@l)
27 / 26 / 2
Регистрация: 13.12.2010
Сообщений: 333
13.10.2011, 16:59  [ТС] #3
вообщем есть такая прога
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
8 / 8 / 0
Регистрация: 18.03.2010
Сообщений: 142
13.10.2011, 16:59 #4
просто скопируйте часть массива в другой массив
1
ViT(Vet@l)
27 / 26 / 2
Регистрация: 13.12.2010
Сообщений: 333
13.10.2011, 17:02  [ТС] #5
Млин, а все-то на поверхности
0
nikola166
8 / 8 / 0
Регистрация: 18.03.2010
Сообщений: 142
13.10.2011, 17:03 #6
конечно))))
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.10.2011, 17:10 #7
Цитата Сообщение от ViT(Vet@l) Посмотреть сообщение
sentence.delete(i, 1);
C++
1
sentence.erase(sentence.begin() + i);
0
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
13.10.2011, 17:12 #8
можно пройтись по строке с другой стороны. так легче убирать проблеы.
ток че не нравится - реверз в конце...

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
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
13.10.2011, 17:30 #9
Надо делать так:
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
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714
13.10.2011, 17:38 #10
Цитата Сообщение от kravam Посмотреть сообщение
Надо делать так:
Код
C:\c_cpp\shitcode>kravam_point.exe
bla , bla , bla .
bla,bla,bla
0
Nameless One
13.10.2011, 17:43
  #11

Не по теме:

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

0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
13.10.2011, 17:56 #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
#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
ViT(Vet@l)
27 / 26 / 2
Регистрация: 13.12.2010
Сообщений: 333
13.10.2011, 21:46  [ТС] #13
А почему нельза вот так:
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
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.10.2011, 08:28 #14
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2011, 08:28
Привет! Вот еще темы с ответами:

Как поставить пробел после функции showpos перед числом? - C++
В таком вот варианте пробел выводит все равно до showpos. Можо ли это как-то исправить? stream &lt;&lt; Z.a &lt;&lt; showpos &lt;&lt; &quot; &quot; &lt;&lt; Z.b &lt;&lt;...

В строке все запятые заменить точкой, и перед первым словом вставить слово STRING - C++
Помогите написать программу, реализовать которую нужно при помощи system.string В строке все запятые заменить точкой, и перед первым...

Перед каждой точкой в строке вставлять в скобках сумму ascii кодов всех букв предложения - C++
Пример qwerty. Не работает программа, вот мой код: int ascii() { string st2=&quot;&quot;; string st=&quot;Qwerty. Qwe.&quot;; cout&lt;&lt;&quot;String:...

Строки: уничтожить в строке запятые перед первой точкой, заменить знаком + все цифры 3я после первой точки - C++
Дано строка длиной n символов, среди которых есть хотя бы одна точка. превратить последовательность s1, s2, ... sn, уничтожив в ней все...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.10.2011, 08:28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru