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

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

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

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

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

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

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

Удалить последнее слово в строке - C++
Дана строка, состоящая из одного или нескольких слов, отделенных друг от друга одним пробелом. Найти и удалить последнее слово, являющееся...

Удалить последнее слово и вывести - C++
Сделал удаления первого слова,подсобите кто-нибудь чтобы в добавок и последнее слово удаляло. Вот код : #include <string.h> #include...

Удалить из строки предпоследнее и последнее слово в с++ - C++
Вводится строка произвольного текста. Удалить из нее предпоследнее и последнее слово (слова разделены пробелами). Ребята, подскажите,...

Удалить в строке последнее слово и удвоить предпоследнее - C++
Доброго Времени Суток! Не могу решить 2 задачи со строками,возможно кто нибудь сможет помочь,вдруг у кого нибудь осталась задача.. Буду...

Строки. Найти и удалить последнее слово, являющееся палиндромом - C++
Помогите с задачей: Дана строка, состоящая из одного или нескольких слов, отделённых друг от друга одним пробелом. Найти и удалить...

Удалить в каждой строке текстового файла последнее слово - C++
Выполнить обработку текстового файла. Определить кол-во предложений в исходном тексте.как реализовать ?Удалить в каждой строке последнее...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
w@
11 / 11 / 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@
11 / 11 / 1
Регистрация: 11.04.2012
Сообщений: 28
13.04.2012, 12:30 #4
это в зависимости куда собираешься выводить полученный текст, и откуда читаешь этот текст. точнее даже не заменить, а вместо последнего слова ставишь точку. то есть если читаешь с файла, запиши в другой файл
zitxbit
Master C/C++
88 / 740 / 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++
88 / 740 / 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);
zitxbit
Master C/C++
88 / 740 / 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);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2012, 17:31
Привет! Вот еще темы с ответами:

Удалить предпоследнее слово предложения - C++
Во всех введеных предложения стереть предпоследнее слово. Вывести ети предложения. Добавлено через 3 минуты Но не переводя слова в...

Сравнить с последнее слово с другими словами в строке и удалить повторяющиеся слова - C++
задание- сравнить с последнее слово с другими словами в строке и удалить повторяющиеся слова(последнее слово=слову в строке). вывести...

Удалить каждое второе слово из предложения - C++
помогите пожалуйста написать программу: Удалить каждое второе слово из предложения. Заранее спасибо!

После каждого предложения в скобках добавить, сколько раз встретилось в нём введённое с клавиатуры слово - C++
Помогите написать программу которая считывает текст из файла и выводит его на экран после каждого предложения в скобках добавляя сколько...


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

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

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