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

Строки. Удалить слова наибольшей длины - C++

Восстановить пароль Регистрация
 
DebieCooper
 Аватар для DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 285
30.11.2011, 12:29     Строки. Удалить слова наибольшей длины #1
В строке удалить слова наибольшей длины. Оставшиеся слова записать через пробел.
След-но пользователь должен сам вводить эти слова, а выдать ему нужно результат.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
30.11.2011, 12:37     Строки. Удалить слова наибольшей длины #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
#include <stdio.h>
#include <string.h>
#define DEL  " .,:;\n\t"
#define N 1024
 
int Max(char *s)
{
    int, i, j, max;
    i = max = 0;
    while (s[i])
    {
        while (s[i] && strchr(DEL, s[i]))
            i++;
        j = i;
        while (s[i] && !strchr(DEL, s[i]))
            i++;
        if (i - j > max)
           max = i - j;
    }
    return max;
}
 
int main( )
{
    char s[N];
    int i, j, k, max;
    printf("s = "); fgets(s, N, stdin);
    max = Max(s);
    i = k = 0;
    while (s[i])
    {
        while (s[i] && strchr(DEL, s[i]))
            i++;
        j = i;
        while (s[i] && !strchr(DEL, s[i]))
            i++;
        if (i - j < max)
        {
            strncpy(s + k, s + j, i - j);
            k += i - j;
            s[k++] = ' ';
        }
    }
    s[k] = '\0';
    puts(s);
    return 0;
}
DebieCooper
 Аватар для DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 285
30.11.2011, 12:49  [ТС]     Строки. Удалить слова наибольшей длины #3
Вот что м не выдаёт. Кстати мы работаем по 2008 студии.
1>z:\petrushkdv\строки. удалить слова\строки. удалить слова\строки.cpp(8) : warning C4091: '' : ignored on left of 'int' when no variable is declared
1>z:\petrushkdv\строки. удалить слова\строки. удалить слова\строки.cpp(8) : error C2143: syntax error : missing ';' before ','
1>z:\petrushkdv\строки. удалить слова\строки. удалить слова\строки.cpp(8) : error C2143: syntax error : missing ';' before ','
1>z:\petrushkdv\строки. удалить слова\строки. удалить слова\строки.cpp(9) : error C2065: 'i' : undeclared identifier
1>z:\petrushkdv\строки. удалить слова\строки. удалить слова\строки.cpp(9) : error C2065: 'max' : undeclared identifier
1>z:\petrushkdv\строки. удалить слова\строки. удалить слова\строки.cpp(10) : error C2065: 'i' : undeclared identifier
1>z:\petrushkdv\строки. удалить слова\строки. удалить слова\строки.cpp(10) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
30.11.2011, 12:51     Строки. Удалить слова наибольшей длины #4
Цитата Сообщение от DebieCooepr Посмотреть сообщение
Вот что м не выдаёт. Кстати мы работаем по 2008 студии.

Не по теме:

приду домой, откомпилирую и проверю, но логика программы верная

-=ЮрА=-
Заблокирован
Автор FAQ
30.11.2011, 12:56     Строки. Удалить слова наибольшей длины #5
DebieCooepr, выполнять в С/С++???
DebieCooper
 Аватар для DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 285
30.11.2011, 12:59  [ТС]     Строки. Удалить слова наибольшей длины #6
C++. Студия 2008.
-=ЮрА=-
30.11.2011, 13:10
  #7

Не по теме:

Цитата Сообщение от DebieCooepr Посмотреть сообщение
C++. Студия 2008.
- уже пишу код, подождите немножко...

DebieCooper
 Аватар для DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 285
30.11.2011, 13:18  [ТС]     Строки. Удалить слова наибольшей длины #8
Спасибо большое.
Я и не тороплюсь. Зачётная неделя скоро, нужно долги сдать)
-=ЮрА=-
Заблокирован
Автор FAQ
30.11.2011, 13:19     Строки. Удалить слова наибольшей длины #9
Цитата Сообщение от DebieCooepr Посмотреть сообщение
В строке удалить слова наибольшей длины. Оставшиеся слова записать через пробел.
След-но пользователь должен сам вводить эти слова, а выдать ему нужно результат.
Вот код на плюсах и скрин работы
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
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
 
int main()
{
    string word;
    string text;
    cout<<"Enter text : \n";
    getline(cin,text);
    stringstream ss;
    ss.str(text);//Г‡Г*Г*îñèì ГІГҐГЄГ±ГІ Гў ñòðîêîâûé ïîòîê
    //Âû÷èñëÿåì Г¬Г*ГЄГ± äëèГ*Г*Гі ñëîâГ* Гў text
    long maxlen = 0;
    while(ss>>word)
    {
        if(maxlen < word.length())
            maxlen = word.length();
    }
    cout<<"Max length of word in string : "<<maxlen<<endl;
    ss.clear();//ÂñòðÿõГ*ВёГ¬ Г*Г*Гё ñòðîêîâûé ïîòîê
    ss.str(text);//Г‡Г*Г*îñèì ГІГҐГЄГ±ГІ Гў ñòðîêîâûé ïîòîê
    cout<<"Text after removing words with maxlen\n";
    while(ss>>word)
    {
        if(word.length() < maxlen)
            cout<<word.c_str()<<" ";
    }
    cout<<endl;
    system("pause");
    return 0;
}
Миниатюры
Строки. Удалить слова наибольшей длины  
-=ЮрА=-
Заблокирован
Автор FAQ
30.11.2011, 13:24     Строки. Удалить слова наибольшей длины #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
getline(cin,text);
- так можно ввести string с пробелами, однако при компиляции на старых компиляторах после того как напечатали строку Enter нужно нажать 2 раза, в 2008-й такого бага уже нет и Enter жать всего один раз

Об std::string читайте здесь http://www.cplusplus.com/reference/string/string/
Об stringstream здесь http://www.cplusplus.com/reference/i.../stringstream/
и здесь http://www.cplusplus.com/reference/i.../stringstream/
Успешной сдачи!
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
30.11.2011, 16:00     Строки. Удалить слова наибольшей длины #11
DebieCooepr, если алгоритм еще нужен, то вот. В том алгоритме запятая лишняя закралась(без компилятора писал):

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
#include <stdio.h>
#include <string.h>
#define DEL  " .,:;\n\t"
#define N 1024
 
int Max(char *s)
{
    int i, j, max;
    i = max = 0;
    while (s[i])
    {
        while (s[i] && strchr(DEL, s[i]))
            i++;
        j = i;
        while (s[i] && !strchr(DEL, s[i]))
            i++;
        if (i - j > max)
           max = i - j;
    }
    return max;
}
 
int main( )
{
    char s[N];
    int i, j, k, max;
    printf("s = "); fgets(s, N, stdin);
    max = Max(s);
    i = k = 0;
    while (s[i])
    {
        while (s[i] && strchr(DEL, s[i]))
            i++;
        j = i;
        while (s[i] && !strchr(DEL, s[i]))
            i++;
        if (i - j < max)
        {
            strncpy(s + k, s + j, i - j);
            k += i - j;
            s[k++] = ' ';
        }
    }
    s[k] = '\0';
    puts(s);
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2011, 18:14     Строки. Удалить слова наибольшей длины
Еще ссылки по теме:

Необходимо найти строку наибольшей длины и увеличить остальные строк в массиве к длине наибольшей строки, используя символ "!" C++
C++ Нужно найти строку наибольшей длины и увеличить остальные строк в массиве к длине наибольшей строки, используя символ "!"
В словах наибольшей длины удалить среднюю букву (средние буквы) C++

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

Или воспользуйтесь поиском по форуму:
DebieCooper
 Аватар для DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 285
30.11.2011, 18:14  [ТС]     Строки. Удалить слова наибольшей длины #12
Спасибо большое. Уже сдал задачу
Yandex
Объявления
30.11.2011, 18:14     Строки. Удалить слова наибольшей длины
Ответ Создать тему
Опции темы

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