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

Удалить среднею букву в нечетных словах текста - C++

Восстановить пароль Регистрация
 
AndreyZ01
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 112
13.12.2012, 03:36     Удалить среднею букву в нечетных словах текста #1
Нужно удалить в каждом нечетном слове среднею букву, я смог дойти только до такого:
удаляет онли в первом слове, дальше уж не знаю, как составить алгоритм, нужна Ваша помощь.
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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
void main ()
{
    
    char text[256];
    int i=0,j=0,q=0;
    cout<<"Enter text: ";
    gets(text);
    while (text[i]!='\0')
    { 
        while(text[i]!=' ' && text[i]!='\0')
        {
            i++;
        }
        j=i;
        if(j%2==1)
        {
            q=(q+(j/2));
            text[q]='-';
            i++;
        }
        if(text[i]!=' ')
        {
            i++;
        }
        
    }
    cout<<"Rez:  "<<text;
    getch();
}
Все слова разделяет только пробелы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xunnapb
1 / 1 / 0
Регистрация: 07.12.2012
Сообщений: 8
13.12.2012, 04:59     Удалить среднею букву в нечетных словах текста #2
Замените цикл (строки 13-31) на следующий и добавьте в начале объявление переменной k=0.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while (text[i]!='\0')
{
    while(text[i+1]!=' '&&text[i+1]!='\0') i++;
    //Переменная-счетчик номера слова
    j++;
    //Проверка на четность позиции слова
    if(j%2==1)
    {
        //Проверка на четность количества символов в слове
        //k-индекс первого символа в слове
        //i-индекс последнего символа в слове
        if ((i+1+k)%2==0)
        q=(i+1+k)/2;
        else q=(i+k)/2;
        text[q]='-';
    }
    i++;
    //Индекс первого символа в следующем слове
    k=i+1;
}
Единственное, считал что слова разделяются одним пробелом. Если может быть несколько пробелов между словами, то надо немного подкоректировать будет
AndreyZ01
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 112
13.12.2012, 12:32  [ТС]     Удалить среднею букву в нечетных словах текста #3
спасибо, но работает все равно только к первому слове
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
13.12.2012, 13:42     Удалить среднею букву в нечетных словах текста #4
А такой вариантик:
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
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <string>
#include <sstream>
 
int main()
{
    setlocale (LC_ALL, "Russian");
 
    std::string str = "Удалить среднею букву в нечетных словах текста";
    bool state = true;
    std::istringstream is(str);
    std::vector<std::string> vs((std::istream_iterator<std::string>(is)), std::istream_iterator<std::string>());
    std::for_each(vs.begin(), vs.end(), [&state](std::string& s)
    {
        if (state) s.erase(s.size()/2, 1);
        state = !state;
        std::cout<<s<<" ";
    });
    std::cout<<"\n";
 
    system("pause");
    return 0;
}
AndreyZ01
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 112
13.12.2012, 13:58  [ТС]     Удалить среднею букву в нечетных словах текста #5
спасибо, все робит, с меня +
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
13.12.2012, 15:07     Удалить среднею букву в нечетных словах текста #6
Чета тупанул с вектором - можно было и без него:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    setlocale (LC_ALL, "Russian");
 
    std::string str = "Удалить среднею букву в нечетных словах текста";
    bool state = true;
    std::istringstream is(str);
    std::for_each(std::istream_iterator<std::string>(is), std::istream_iterator<std::string>(), [&state](std::string s)
    {
        if (state) s.erase(s.size()/2, 1);
        state = !state;
        std::cout<<s<<" ";
    });
    std::cout<<"\n\n";
 
    system("pause");
    return 0;
}
Yandex
Объявления
13.12.2012, 15:07     Удалить среднею букву в нечетных словах текста
Ответ Создать тему
Опции темы

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