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

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

Войти
Регистрация
Восстановить пароль
 
GHOST12
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 87
#1

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

13.04.2012, 10:15. Просмотров 830. Ответов 8
Метки нет (Все метки)

Дан текст.
Нужно удалить последнее слово из каждого предложения.

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

C++ Удалить предпоследнее слово предложения
Написать программу, которая считывает текст из файла, добавляет после каждого предложения сколько раз в нем встретилось введенное слово C++
После каждого предложения в скобках добавить, сколько раз встретилось в нём введённое с клавиатуры слово C++
C++ С++ Удалить в каждой строке последнее слово
Удалить из строки предпоследнее и последнее слово в с++ C++
C++ С помощью функций библиотеки string.h удалить из предложения слово USSR
Строки. Найти и удалить последнее слово, являющееся палиндромом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
w@
10 / 10 / 1
Регистрация: 11.04.2012
Сообщений: 28
13.04.2012, 11:30     Строка: удалить последнее слово из каждого предложения. #2
попробуй перебрать по словам и проверить последний элемент слов. слово с "., !, ?" заменяешь просто точкой... в конце ставишь конец строки
GHOST12
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 87
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
87 / 739 / 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
Сообщений: 87
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
87 / 739 / 75
Регистрация: 11.04.2012
Сообщений: 971
13.04.2012, 17:08     Строка: удалить последнее слово из каждого предложения. #7
Уважаемай GHOST12 прошу уточнить вопрос. Что значит с динамическим массивом?
GHOST12
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 87
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++
Удалить последнее слово и вывести C++
C++ Удалить последнее слово в строке

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

Или воспользуйтесь поиском по форуму:
zitxbit
Master C/C++
 Аватар для zitxbit
87 / 739 / 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     Строка: удалить последнее слово из каждого предложения.
Ответ Создать тему
Опции темы

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