Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
spooky81
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 16
#1

Дана строка символов, состоящая из цифр и пробелов. Вывести на экран слово с максимальной длиной - C++

11.05.2013, 21:51. Просмотров 1756. Ответов 11
Метки нет (Все метки)

Помогите, выдает ошибку в проверке условия цикла
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
#include <conio.h>
#include <stdio.h>
#include <string.h>
 
int main()
{
char dest[200];
clrscr();
printf("Vvedite stroku simvolov \n");
gets(dest);
 
char * buf = new char[strlen(dest)+1];
strcpy(buf, dest);
char * temp = strtok (buf, " ");  //âûäåëèòü ïåðâîå ñëîâî ñòðîêè
size_t max = strlen(temp); //ÏðèГ*ГїГІГј ГЅГІГ® ñëîâî Г§Г* ñëîâî Г± Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îé äëèГ*îé
char * strmax = new char[max+1];
 
while (temp != NULL)    //âûäåëèòü ïîñëåäóþùåå ñëîâî ГЁ Г±Г°Г*ГўГ*ГЁГІГј ГЁГµ Г±Г® ñëîâîì max äëèГ*Г»
{
  printf("%s\n", temp);
  temp = strtok(NULL, " ");
  if (max < strlen(temp))
{
  delete []strmax;
  max = strlen(temp);
  strmax = new char[max+1];
  strcpy(strmax, temp);
}
}
printf("\nSamoe dlinnoe slovo - %s", strmax);
delete[]strmax;
delete[]buf;
getch();
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2013, 21:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дана строка символов, состоящая из цифр и пробелов. Вывести на экран слово с максимальной длиной (C++):

Дана строка символов, состоящая из цифр, разделенных пробелами. Вывести четные числа этой строки - C++
Дана строка символов, состоящая из цифр, разделенных пробелами. Вывести четные числа этой строки если я ввожу 1 2 3 4 5, выводит 2 4,...

Дана строка символов, состоящая из цифр, разделенных пробелами. Вывести четные числа этой строки- не работает - C++
#include &lt;vcl.h&gt; #pragma hdrstop #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;string.h&gt; void main() { int n,i; ...

Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран группы с четным количеством символов - C++
Помогите с решение задачи на Macrosoft Visual C++ Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран группы с...

Дана строка символов, состоящая из произвольного текста, слова раз-делены пробелами. Вывести на экран порядковый номер слова, накрывающего k позицию - C++
Помогите с вот такой вот задачкой: Дана строка символов, состоящая из произвольного текста, слова раз- делены пробелами. Вывести на...

Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. - C++
Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. Ввод В первой строке файла...

Дана строка символов, состоящая из букв и цифр. Удалить из строки все цифры - C++
Нужна прога... Дана строка символов, состоящая из букв и цифр. Удалить из строки все цифры. Буду очень признательна

11
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
11.05.2013, 22:13 #2
spooky81,

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
#include <iostream>
#include <string>
#include <sstream>
 
std::string max_word(std::string _str){
    std::string word, max;
    std::istringstream iss(_str);
 
    iss >> max;
    while(iss >> word){
        if(max.length() < word.length())
            max = word;
    }
 
    return max;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string str("Hello bye morning programming night");
    //getline(std::cin, str);         или так для ввода пользователем строки
 
    std::cout << str << '\n';
    std::cout << max_word(str) << '\n';
 
    return 0;
}
0
spooky81
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 16
11.05.2013, 22:16  [ТС] #3
Спасибо! Но нужно использовать строки С))
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
11.05.2013, 22:27 #4
spooky81, все очень просто

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
while (temp != NULL)    //выделить последующее слово и сравнить их со словом max длины
    {
        printf("%s\n", temp);
        if (max < strlen(temp))
        {
            delete []strmax;
            max = strlen(temp);
            strmax = new char[max+1];
            strcpy(strmax, temp);
        }
 
        temp = strtok(NULL, " ");
    }
вот так вставьте)
1
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
11.05.2013, 22:30 #5
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
#include <stdio.h>
#include <string.h>
 
int main()
{
    const int STR_LEN = 200;
    char dest[STR_LEN];
    printf("Vvedite stroku simvolov \n");
    fgets(dest, STR_LEN-1, stdin);
 
    char * buf = new char[strlen(dest)+1];
    strcpy(buf, dest);
    char * temp = strtok (buf, " \n\t");  //выделить первое слово строки
    size_t max = strlen(temp); //Принять это слово за слово с максимальной длиной
    char * strmax = new char[max+1];
    strcpy(strmax, temp);
 
    printf("%s\n", temp);
    const char* delim = " \n\t";
    temp = strtok(NULL, delim);
    while (temp != NULL)    //выделить последующее слово и сравнить их со словом max длины
    {
        printf("%s\n", temp);
        if (max < strlen(temp))
        {
            delete [] strmax;
            max = strlen(temp);
            strmax = new char[max+1];
            strcpy(strmax, temp);
        }
        temp = strtok(NULL, delim);
    }
    printf("\nSamoe dlinnoe slovo - %s\n", strmax);
    delete[]strmax;
    delete[]buf;
    return 0;
}
Используя stl будет по-проще:
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 <sstream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
 
bool cmp(const std::string& left, const std::string& right)
{
    return left.size() < right.size();
}
 
typedef std::istream_iterator<std::string> ii;
 
int main()
{
    std::string line;
 
    std::cout << "Put line: ";
    std::getline(std::cin, line);
 
    std::stringstream str(line);
    std::vector<std::string> v((ii(str)), ii());
    std::vector<std::string>::iterator iter = std::max_element(v.begin(), v.end(), cmp);
    std::cout << "Max word: " << *iter << std::endl;
}
1
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
11.05.2013, 22:37 #6
xtorne21st,
Цитата Сообщение от spooky81 Посмотреть сообщение
Спасибо! Но нужно использовать строки С))
0
spooky81
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 16
11.05.2013, 22:44  [ТС] #7
Большое спасибо! проблема еще в том, что если первое слово самое длинное - выводит мусор((
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
11.05.2013, 22:49 #8
spooky81,

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
#include <conio.h>
#include <stdio.h>
#include <string.h>
 
int main()
{
    char dest[200];
    printf("Vvedite stroku simvolov \n");
    gets(dest);
 
    char * buf = new char[strlen(dest)+1];
    strcpy(buf, dest);
    char * temp = strtok (buf, " ");  //выделить первое слово строки
    size_t max = strlen(temp); //Принять это слово за слово с максимальной длиной
    char * strmax = new char[max+1];
    strcpy(strmax, temp);
 
    while (temp != NULL)    //выделить последующее слово и сравнить их со словом max длины
    {
        printf("%s\n", temp);
        if (max < strlen(temp))
        {
            delete []strmax;
            max = strlen(temp);
            strmax = new char[max+1];
            strcpy(strmax, temp);
        }
 
        temp = strtok(NULL, " ");
    }
    printf("\nSamoe dlinnoe slovo - %s", strmax);
    delete[]strmax;
    delete[]buf;
    getch();
    return 0;
}
1
spooky81
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 16
11.05.2013, 22:56  [ТС] #9
Всем большое спасибо))
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
12.05.2013, 13:16 #10
yoghurt92, пожалуйста, будьте более внимательны (пост №6)
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
12.05.2013, 13:41 #11
xtorne21st, я внимателен Просто вы предлагаете вариант с Stl после того как ТС уточнил, что нужны С-строки Хотя ваш вариант мне понравился больше
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
12.05.2013, 13:45 #12
yoghurt92, там также есть рабочий вариант с с-сроками
0
12.05.2013, 13:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2013, 13:45
Привет! Вот еще темы с ответами:

Дана строка символов что складаютья из цифр разделенных пробелами. Вывести на экран числа этой строки в порядке возрастания их значений - C++
Дана строка символов что складаютья из цифр разделенных пробелами. Вывести на экран числа этой строки в порядке возрастания их значений. ...

Дана строка символов, состоящая из букв, цифр, запятых, точек, знаков «+» и «–». Выделить подстроку, которая соответствует записи вещественного числа - C++
Дана строка символов, состоящая из букв, цифр, запятых, точек, знаков «+» и «–». Выделить подстроку, которая соответствует записи...

Дана строка символов,состоящая из произвольного текста - C++
помогите пожалуйста с задачей(С++) Дана строка символов ,состоящая из произвольного текста,слова разделены пробелами.вывести на экран...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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