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

Обработка строк с использованием указателей: вывести слова в два столбика, по четности их длины - C++

Восстановить пароль Регистрация
 
adelina2223
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 21
13.06.2014, 07:36     Обработка строк с использованием указателей: вывести слова в два столбика, по четности их длины #1
Дана строка. Распечатать слова в два столбика. 1 столбик — слова, имеющие четное количество букв, а второй — нечётное.

Добавлено через 42 секунды
help!
help!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2014, 07:36     Обработка строк с использованием указателей: вывести слова в два столбика, по четности их длины
Посмотрите здесь:

C++ Обработка одномерных массивов с использованием указателей
После ввода с клавиатуры произвольного одномерного массива целых чисел (объекта данного класса),в пределах целого типа вывести в два столбика положите C++
C++ Обработка одномерных массивов с использованием указателей (Visual studio) C++
Обработка одномерных массивов с использованием указателей C++
С использованием функций и указателей отсортировать строки массива строк по убыванию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
13.06.2014, 12:10     Обработка строк с использованием указателей: вывести слова в два столбика, по четности их длины #2
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#define UNICODE
#include <iostream>
#include <iomanip>
#include <ostream>
#include <istream>
#include <string>
#include <vector>
#include <algorithm>
#ifdef UNICODE
#include <cwchar>
#include <cwctype>
typedef wchar_t char_t;
#define T(text) L##text
#define isSpace(ch) iswspace((ch))
#else
#include <cctype>
typedef char char_t;
#define T(text) text
#define isSpace(ch) isspace((ch))
#endif// UNICODE
 
typedef std::basic_string  < char_t > string;
typedef std::basic_istream < char_t > istream;
typedef std::basic_ostream < char_t > ostream;
typedef std::vector< string > stringVector;
 
size_t some(const string &line, stringVector *w) {
    string word;
    for(string::const_iterator c = line.begin();
        c != line.end(); ++c) {
        if(isSpace(*c)) {
            if(false == word.empty()) {
                w[word.size()%2].push_back(string(word));
                word = T("");
            }
        }
        else
            word.push_back(*c);
    }
    if(false == word.empty()) {
        w[word.size()%2].push_back(word);
    }
    size_t len1 = 0;
    size_t len2 = 0;
    std::sort(w[0].begin(), w[0].end());
    std::sort(w[1].begin(), w[1].end());
    if(false == w[0].empty())
        len1 = w[0].back().size();
    if(false == w[1].empty())
        len2 = w[1].back().size();
    return (len1 > len2 ? len1 : len2);
}
int process(istream &in, ostream &out) {
    stringVector w[2];
    string line;
    size_t wspace;
    size_t count;
    
    out<<T("Enter line: ");
    std::getline(in, line);
    wspace = some(line, w)+2;
    count = std::max(w[0].size(), w[1].size());
    out.width(wspace);
    out<<T("0");
    out.width(wspace);
    out<<T("1")<<std::endl;
    for(size_t i = 0; i<count; ++i) {
        out.width(wspace);
        out<<(i<w[0].size() ? w[0].at(i) : string(T(" ")));
        out.width(wspace);
        out<<(i<w[1].size() ? w[1].at(i) : string(T("")));
        out<<std::endl;
    }
    return 0;
}
int main() {
#ifdef UNICODE
    return process(std::wcin, std::wcout);
#else
    return process(std::cin, std::cout);
#endif
}
Trwsdf
Заблокирован
13.06.2014, 13:24     Обработка строк с использованием указателей: вывести слова в два столбика, по четности их длины #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
std::string init = "sss  jkjkd ssdl   erjk fddl edd ";
    std::vector<char> result;
    std::vector<std::string> a;
    std::vector<std::string> b;
    for (const char& c : init)
        if (std::isalpha(c)) result.push_back(c);
        else if (result.size()) {
            if (result.size() % 2)
                a.push_back(std::string(result.begin(), result.end()));
            else
                b.push_back(std::string(result.begin(), result.end()));
            result.clear();
        }
    for (int i = 0; i < ((a.size() > b.size()) ? a.size() : b.size()); i++) {
        if (i < b.size())std::cout << b[i];
        std::cout << "\t\t";
        if (i < a.size()) std::cout << a[i];
        std::cout << std::endl;
    };
adelina2223
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 21
15.06.2014, 07:10  [ТС]     Обработка строк с использованием указателей: вывести слова в два столбика, по четности их длины #4
Нужна помошь в легчайшей программе ^____^

Добавлено через 13 часов 49 минут
Trwsdf, помогите пожалуйста сделать не такой замудрёный код

Добавлено через 34 минуты
Cra3y, помогите пожалуйста сделать не такой замудрёный код
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
06.08.2014, 01:46     Обработка строк с использованием указателей: вывести слова в два столбика, по четности их длины #5
C++
1
2
3
4
5
6
7
    istringstream is("Lorem ipsum dolor sit amet hgf 1213kakaka cotuer132 adipiscing eli3t Aenean commodo ligula eget dolo8r hgfa");
    vector<string> a, b;
    auto pred = bind2nd(ptr_fun(isalpha<char>), locale());
    for_each(istream_iterator<string>(is), istream_iterator<string>(), [&](const string& str) { (count_if(begin(str), end(str), pred)%2 ? a:b).push_back(str); });
    size_t max_words = max(a.size(), b.size());
    for(size_t i = 0; i<max_words; ++i)
        cout<<((i<b.size())?((i<a.size())?b[i]+"\t\t"+a[i]:b[i]):"\t\t"+a[i])<<endl;
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
06.08.2014, 21:23     Обработка строк с использованием указателей: вывести слова в два столбика, по четности их длины #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int main()
{
    char const* const str = " Lorem ipsum dolor  s amet hgf 1212kakaka cotuer132 adipis ";
    for(char const* pa = str, *pb = str; *pa; pa = pb)
    {
        for(; ' ' == *pa; ++pa)
            ;
        for(pb = pa; ' ' != *pb && '\0' != *pb; ++pb)
            ;
        (std::cout << ((pb - pa) & 1 ? "                  " : "")).write(pa, pb - pa) << '\n';
    }
    return 0;
}
Yandex
Объявления
06.08.2014, 21:23     Обработка строк с использованием указателей: вывести слова в два столбика, по четности их длины
Ответ Создать тему
Опции темы

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