IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Удалить из строки все предложения, заканчивающиеся !, C++/minGw
Andrewshkovskii
сообщение 20.12.2008 19:05
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


Есть строка типа string
"1231.1232!1233.1234.1235!1236."
надо получить строку
"1231.1233.1234.1236."

Никак не могу додуматься, как разбить на отдельные предложения или же сразу удалять..может кто-нибудь наводку кинет?..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
volvo
сообщение 20.12.2008 19:48
Сообщение #2


Гость






int main() {
    char s[256] = "1231.1232!1233.1234.1235!1236.";
    char result[256] = {0}, *res;

    res = result;
    int count = 0;
    for(char *p = s; *p; p++) {
        switch(*p) {
            case '.':
            case '?':
                *res++ = *p;
                count = 0;
                break;
            case '!':
                res -= count;
                break;
            default:
                *res++ = *p; count += 1;
        }
    }
    *res = '\0';
    puts(result);
    return 0;
}

Пойдет?
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 20.12.2008 19:50
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


а что насчет string из с++ ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 20.12.2008 20:38
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


я извратился так, на болшее моей скудной фантазии и интеллекта не хватило smile.gif) :

#include <stdio.h>
#include <string.h>
#include <iostream.h>

using namespace std;
int main() {

    	string s1="1231.1232!1233.1234.1235!1236.";
    	char * s = new char[s1.size()+1];
    	strcpy(s, (char *)s1.c_str());
    char result[s1.size()] ;//= {0};
    char *res;

    res = result;
    int count = 0;
    for(char *p = s; *p; p++) {
        switch(*p) {
            case '.':
            case '?':
                *res++ = *p;
                count = 0;
                break;
            case '!':
                res -= count;
                break;
            default:
                *res++ = *p; count += 1;
        }
    }
    *res = '\0';
    puts(result);
    s1=result;
    return 0;
}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.12.2008 21:14
Сообщение #5


Гость






blink.gif

#include <string>
#include <iostream>

using namespace std;

int main() {
    string s = "1230!1231.1232!1233.1234.1235!1236.1237!";
    cout << s << endl;

    size_t found = s.find('!');
    while(found != string::npos) {
        size_t prev = s.find_last_of(".?", found);
        if(prev == string::npos) prev = (size_t)(-1);
        s.erase(prev + 1, found - prev);
        found = s.find('!');
    }
    cout << s << endl;
    return 0;
}

Попроще будет...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 8.08.2025 7:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"