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

Строка: удалить последнее слово из каждого предложения. - C++

Восстановить пароль Регистрация
 
GHOST12
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 86
13.04.2012, 10:15     Строка: удалить последнее слово из каждого предложения. #1
Дан текст.
Нужно удалить последнее слово из каждого предложения.

Я делаю так.
По порядку пребераю все элементы пока не встретиться точка, если встретилась точка то перебераю элементы в обратном порядке от точки и до первого пробела. Таким образом я нашел количество букв в слове и с какого элемента оно начинается. Далее сдвигаю остальные элементы текста на количество букв.
Помогите сделать, у меня ни чего не вышло пока.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2012, 10:15     Строка: удалить последнее слово из каждого предложения.
Посмотрите здесь:

C++ Удалить предпоследнее слово предложения
C++ С++ Удалить в каждой строке последнее слово
Задача в Си. Дана строка в виде предложения. Найти в ней слово-перевертыш максимальной длинны C++
Удалить из строки предпоследнее и последнее слово в с++ C++
C++ С помощью функций библиотеки string.h удалить из предложения слово USSR
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
w@
10 / 10 / 1
Регистрация: 11.04.2012
Сообщений: 28
13.04.2012, 11:30     Строка: удалить последнее слово из каждого предложения. #2
попробуй перебрать по словам и проверить последний элемент слов. слово с "., !, ?" заменяешь просто точкой... в конце ставишь конец строки
GHOST12
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 86
13.04.2012, 12:08  [ТС]     Строка: удалить последнее слово из каждого предложения. #3
Цитата Сообщение от w@ Посмотреть сообщение
попробуй перебрать по словам и проверить последний элемент слов. слово с "., !, ?" заменяешь просто точкой... в конце ставишь конец строки
А как заменить слово точкой?
w@
10 / 10 / 1
Регистрация: 11.04.2012
Сообщений: 28
13.04.2012, 12:30     Строка: удалить последнее слово из каждого предложения. #4
это в зависимости куда собираешься выводить полученный текст, и откуда читаешь этот текст. точнее даже не заменить, а вместо последнего слова ставишь точку. то есть если читаешь с файла, запиши в другой файл
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
13.04.2012, 13:05     Строка: удалить последнее слово из каждого предложения. #5
C++
1
2
3
4
5
6
7
8
9
10
    static char psz[256] = "the question is to be or not to be? parameter is like a variable.";
 
    for (int i = 0; psz[i] != '\0'; i++)
        if (psz[i] == '.' || psz[i] == '?' || psz[i] == '!')
        {
            int pos = i;
            while ((psz[pos] != ' ') && (pos >= 0)) pos--;
            for (int n = pos; psz[n] != '\0'; n++)
                psz[n] = psz[n+(i-pos)];
        }
GHOST12
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 86
13.04.2012, 16:46  [ТС]     Строка: удалить последнее слово из каждого предложения. #6
Цитата Сообщение от zitxbit Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
    static char psz[256] = "the question is to be or not to be? parameter is like a variable.";
 
    for (int i = 0; psz[i] != '\0'; i++)
        if (psz[i] == '.' || psz[i] == '?' || psz[i] == '!')
        {
            int pos = i;
            while ((psz[pos] != ' ') && (pos >= 0)) pos--;
            for (int n = pos; psz[n] != '\0'; n++)
                psz[n] = psz[n+(i-pos)];
        }
Слушай, а что нужно сделать, чтобы это работало с динамической массивом?

Вот так не работает
C
1
2
3
4
5
6
7
8
9
10
11
char *psz = "the question is to be or not to be? parameter is like a variable.";
 
    for (int i = 0; psz[i] != '\0'; i++)
        if (psz[i] == '.' || psz[i] == '?' || psz[i] == '!')
        {
            int pos = i;
            while ((psz[pos] != ' ') && (pos >= 0)) pos--;
            for (int n = pos; psz[n] != '\0'; n++)
                psz[n] = psz[n+(i-pos)];
        }
        printf("%s",psz);
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
13.04.2012, 17:08     Строка: удалить последнее слово из каждого предложения. #7
Уважаемай GHOST12 прошу уточнить вопрос. Что значит с динамическим массивом?
GHOST12
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 86
13.04.2012, 17:24  [ТС]     Строка: удалить последнее слово из каждого предложения. #8
Цитата Сообщение от zitxbit Посмотреть сообщение
Уважаемай GHOST12 прошу уточнить вопрос. Что значит с динамическим массивом?
Задать массив с помощью указателя.
Как я понимаю то вот так
C
1
*psz = "the question is to be or not to be? parameter is like a variable.";
Что сделать чтобы это работало
C
1
2
3
4
5
6
7
8
9
10
11
char *psz = "the question is to be or not to be? parameter is like a variable.";
 
    for (int i = 0; psz[i] != '\0'; i++)
        if (psz[i] == '.' || psz[i] == '?' || psz[i] == '!')
        {
            int pos = i;
            while ((psz[pos] != ' ') && (pos >= 0)) pos--;
            for (int n = pos; psz[n] != '\0'; n++)
                psz[n] = psz[n+(i-pos)];
        }
        printf("%s",psz);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2012, 17:31     Строка: удалить последнее слово из каждого предложения.
Еще ссылки по теме:

Строки. Найти и удалить последнее слово, являющееся палиндромом C++
C++ Удалить в строке последнее слово и удвоить предпоследнее
Удалить каждое второе слово из предложения C++

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

Или воспользуйтесь поиском по форуму:
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
13.04.2012, 17:31     Строка: удалить последнее слово из каждого предложения. #9
1. Уважаемай GHOST12, с указателем в вашем примере не работает потому что, он указывает на
константное значение строки в памяти. Если знаете, то стандартн. функции strtok, strcspn тоже
не работают с указателями, которым присваевают адрес константного значения в памяти.

2. Размещаю варианты кода в которых все работает с указателем:

Вариант 1:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(void)
{
     static char line[256] = "the question is to be or not to be? parameter is like a variable.";
     lword(line); printf("%s\n",line);
}
 
void lword(char* psz)
{
    for (int i = 0; psz[i] != '\0'; i++)
        if (psz[i] == '.' || psz[i] == '?' || psz[i] == '!')
        {
            int pos = i;
            while ((psz[pos] != ' ') && (pos >= 0)) pos--;
            for (int n = pos; psz[n] != '\0'; n++)
                psz[n] = psz[n+(i-pos)];
        }
}
Вариант 2:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    char* psz = new char[256];
    strcpy(psz,"the question is to be or not to be? parameter is like a variable.");
 
    for (int i = 0; psz[i] != '\0'; i++)
        if (psz[i] == '.' || psz[i] == '?' || psz[i] == '!')
        {
            int pos = i;
            while ((psz[pos] != ' ') && (pos >= 0)) pos--;
            for (int n = pos; psz[n] != '\0'; n++)
                psz[n] = psz[n+(i-pos)];
        }
 
     printf("%s\n",psz);
Yandex
Объявления
13.04.2012, 17:31     Строка: удалить последнее слово из каждого предложения.
Ответ Создать тему
Опции темы

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