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

Найти самое длинное слово в строке - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
Raton_Laveur
0 / 0 / 0
Регистрация: 19.07.2013
Сообщений: 16
20.11.2013, 18:18     Найти самое длинное слово в строке #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
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
void main()
{
char *str;
int n=0;//4islo bukv v slove
int maxn=0;//nu da
 clrscr();
 cout<<"stroka: ";
  gets(str);
  cout<<endl;
 
//типа нахожу число букв в самом длинном слове
for(int i=0;i<strlen(str);i++) {
if((str[i]!=' '))
n++;
if((str[i]==' ')||(strlen(str)-i==1)){
if(n>maxn)
maxn=n;
n=0;        }                   }
n=0;
 
for(i=0;i<strlen(str);i++) {
if((str[i]!=' '))
n++;
if((str[i]==' ')||(strlen(str)-i==1)){        //типа нахожу само это слово и записываю его в начало всё той же строки
if(n==maxn){
    int k=i+1-maxn;
    for(int j=0;j<maxn;++j){
    str[j]=str[k];
    k++;            }
    break;
        }
 
n=0;                      }
                }
for(i=maxn;i<strlen(str);i++)       //типа как-то по-дурацки обнуляю оставшуюся часть
str[i]=0;
puts(str);
 getch();
}
ЗЫ: Знаю, что способ нерациональный, дурацкий и всё такое, но при выполнении вроде всё правильно - и вылет=(((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rrrFer
Заблокирован
20.11.2013, 18:38     Найти самое длинное слово в строке #2
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
string str, longword, word;
stringstream sstr;
 
sstr << str;
sstr >> longword;
while (false == sstr.eof()) {
  sstr >> word;
  if (word.length() > longword.length())
    longword = word;
}
"не создавая новых строк" не заметил, щас исправлю )

C++ (Qt)
1
2
3
char *str;
// ...
  gets(str);
Почему оно работает вообще? память под строку не выделяется...

Добавлено через 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
#include <stdio.h>
#include <iostream>
#include <string.h>
 
int main() {
  char *str = new char[255];
  int n=0, maxn=0, pos = 0, len;
  
  strcpy(str, "2134 235 23673 42 423 145 24 234 25");
  len = strlen(str);
 
  for(int i=0;i<len;i++) {
    if(str[i]!=' ')
      n++;
    if((str[i]==' ')||(len-i==1)) {
      if(n>maxn) {
        pos = i - n;
        maxn=n;
      }
      n=0;   
    }
  }                   
  
  for (int i = 0; i < maxn; ++i)
    std::cout << str[i + pos];
  std::cout << std::endl;
 
  delete []str;
}
Та, часть, кода, которая выполняла это: "//типа нахожу само это слово и записываю его в начало всё той же строки" вообще не нужна в задании.
Raton_Laveur
0 / 0 / 0
Регистрация: 19.07.2013
Сообщений: 16
21.11.2013, 14:47  [ТС]     Найти самое длинное слово в строке #3
Да, неплохо тупанула, спасибо) Насчёт того, почему работает - на Си, по-моему, вообще практически любой бред работает, просто делает это соответственно глупости писавшего код))

Добавлено через 22 минуты
Только что дошло, что по-человечески это всегда делалось через strtok, ржу

Добавлено через 10 минут
Хотя я нагло вру, там же новые строки создаются...
Единственное, что ещё стрёмно: в моём коде оно реагирует на пробелы, т.е. если в строке есть другие знаки препинания, то получается бред, ибо даже если их указать в условии, то всё равно они не учитываются при запоминании позиции...

Добавлено через 42 минуты
Всё решилось весьма топорно, но просто:
C++
1
2
3
4
5
6
7
8
9
for(int i=0;i<strlen(str);i++) {
if((str[i]!=' ')&&(str[i]!=',')&&(str[i]!='.')&&(str[i]!=';')&&(str[i]!=':'))
n++;
if((str[i]==' ')||(strlen(str)-i==1)||(str[i]==',')||(str[i]=='.')||(str[i]==';')||(str[i]==':')){
if(n>maxn){
maxn=n;
pos=i-n;
if(i>n) pos++;}
n=0;        }                   }
AGPro
2 / 2 / 0
Регистрация: 03.04.2016
Сообщений: 90
06.04.2016, 15:47     Найти самое длинное слово в строке #4
Здесь проги с ошибками, к сожалению. Правильного решения нет.
flash_back
2 / 2 / 0
Регистрация: 07.02.2016
Сообщений: 65
16.06.2016, 16:05     Найти самое длинное слово в строке #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 <iostream>
#include <cstring>
 
using namespace std;
 
int main()
{
 
    char string[200];
 
    cin.getline(string,200);
 
    char * pch = strtok (string," "),  // получаем первое слово
         * word = 0; // самое длинное слово
 
    int length = strlen(pch);          // определяем длинну первого слова
 
    int maxLen = 0; // самое длинное слово
 
      while (pch != NULL)                         // пока есть слова
      {
          length = strlen(pch);        // определяем длинну слова
 
          if (maxLen < length )        // определяем самое длинное слово
          {
              maxLen = length;
              word = pch;              // сохраняем указатель на текущее слово
          }
 
          pch = strtok (NULL, " "); // получаем следующее слово
      }
 
      cout << word;
 
 
    return 0;
}
Yandex
Объявления
16.06.2016, 16:05     Найти самое длинное слово в строке
Ответ Создать тему
Опции темы

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