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

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

Войти
Регистрация
Восстановить пароль
 
nega_ufa
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 12
#1

Задача по строкам - C++

15.04.2012, 21:55. Просмотров 696. Ответов 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
27
28
29
30
31
#include<conio.h>
#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include<string.h>
main()
{
char *str1;
char *str2;
int i,k,l,j;
clrscr();
cout<<"vvedite stroku"<<"\n";
gets(str1);
k=strlen(str1);
str2=new char[k];
j=0;
*(str2+j)='\0';
for(i=0;i<k;i++)
if(*(str1+i)!=' ')  { //&&(*(str1+i)!='\0'){
*(str2+j)=*(str1+i);j++;}
else {
l=strlen(str2);
cout<<l<<" ";
if(l%2!=0){
*(str2+j)='\0';
puts(str2);
}j=0;*(str2+j)='\0';
}
 
getch();
}
Пожалуйста, помогите, нужно очень срочно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2012, 21:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача по строкам (C++):

Задача по строкам - C++
Вообщем нужно написать программу по этим заданиях: 1) Для заданного массива из 5 лент напечатать ленту, в которой встречается больше...

Задача по строкам - C++
Дано предложение. Удалить из него слова, состоящие не менее чем из четырех букв, хотя бы одна из которых латинская буква ‘w’ ...

Задача по строкам в С - C++
Такое дело.Вот задача на С: Найти самое длинное общее слово для всех предложений текста. (Предложения отделяются точками, между словами 1...

Задача по строкам - C++
Дана последовательность символов. Определить, является ли она правильной записью вещественного числа (тип string запрещен для...

Задача по строкам!!! - C++
Ребят, передо мной поставлена вот такая задача: Даны две строки, содержащие не более 100 символов. Строки состоят из слов, разделенных...

Задача по строкам!String - C++
Помогите пожалуйста с задачей по строкам.. String Вводится предложение строка,вывести все слова с тремя буквами i,разделитель между...

4
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
15.04.2012, 22:53 #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
#include <iostream>
#include <string>
 
bool isValidWord( std::string word );
 
int main()
{
   std::string text; // строка для ввода пользователем
   std::string word; // текущее слово
   const char *delimeters = " .,;:?!"; // символы разделяющие слова
   size_t prevPos = 0; // предыдущая позиция поиска
   size_t curPos = 0; // текущая позиция поиска
 
   std::cout << "Vvedite text:" << std::endl;
   std::getline( std::cin, text );
 
   curPos = text.find_first_of( delimeters );
   while ( curPos != std::string::npos )
   {
      word = text.substr( prevPos, curPos - prevPos );
      if ( isValidWord( word ) )
         std::cout << word << std::endl;
 
      prevPos = curPos + 1;
      curPos = text.find_first_of( delimeters, curPos + 1 );
   }
   word = text.substr( prevPos, text.length() - prevPos ); // обработка последнего слова
   if ( isValidWord( word ) )
      std::cout << word << std::endl;
 
   return 0;
}
 
bool isValidWord( std::string word )
{
   if ( word.length() % 2 == 1 )
   {
      bool isBreaked = false;
      for ( size_t i = 0; i < word.length(); ++i )
      {
         if ( word.rfind( word.at(i) ) != i )
         {
            isBreaked = true;
            break;
         }
      }
 
      if ( isBreaked )
         return false;
      else
         return true;
   }
   else
      return false;
}
0
nega_ufa
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 12
16.04.2012, 15:58  [ТС] #3
система на все ругается...но все равно спасибо...я делал вывод нечетных слов, не могли бы вы написать код проверяющий слова на одинаковость букв???заранее спасибо
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
16.04.2012, 18:07 #4
nega_ufa, в моём алгоритме строки с 39 по 55 находят при помощи функции rfind() самую правую позицию символа в отдельном слове, и, если эта позиция отличается от текущей, то этот символ повторяется. А на что конкретно ругается компилятор? Если вам нужен код на чистом C, т.е. без C++
То попробуйте копать в сторону функций strtok() + strrchr()
Вначале разбиваете предложение на слова, затем для каждого символа в слове выполняете функцию strrchr( текущее_слово, искомый символ ), обратите внимание на буковку r. Эта функция возвращает указатель на самый правый искомый символ, если этот возвращаемый указатель сравнить с текущей позицией, то можно узнать, есть ли такой же символ правее в текущей строке. Узнать позицию символа в строке можно при помощи арифметики указателей ( символ_в_строке - самый_первый_символ_в_строке )

Добавлено через 12 минут
ps даже можно, по-моему, просто сравнивать указатели, например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WORD_LEN = strlen( word );
int hasTwo = 0; // флаг наличия двух одинаковых символов в строке
for ( size_t i = 0; i < WORD_LEN; ++i )
{
    if ( &(word[i]) != strrchr( word, word[i] ) )
       {
        // здесь код, что нужно делать, когда слово имеет два одинаковых символа
            hasTwo = 1;
            break;
       }
   
}
 if ( hasTwo != 0 )
       printf("%s\n", word);
но это только в теории, на практике не проверял
0
nega_ufa
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 12
17.04.2012, 17:37  [ТС] #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
38
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<iostream.h>
 
main()
{
  char *str1, *str2;
  int k,i,j,x,y,z=0;
  
  clrscr();
  
  printf("vvedite stroku\n");
  gets(str1);
  
  k = strlen(str1);
  str2 = new char[k];
  for(i=0,j=0; i<k; j=0,i++){
    while((*(str1+i)!=' ')&&(i<k)){
      *(str2+j++)=*(str1+i++);
    }
    *(str2+j)='\0';
    if(j%2!=0){
      for(x=1; x<j; x++){
        for(y=0; y<x; y++){
          if(*(str2+x)==*(str2+y)){
            z=1;
          }
        }
      }
      if(z==0)
        cout << str2 << " ";
      else
        z=0;
    }
  }
  getch();
}
еще раз спасибо, тема закрыта
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2012, 17:37
Привет! Вот еще темы с ответами:

Задача по строкам и пунктуации на C++ - C++
Я только изучаю C++, учусь по видеоурокам и учебникам, но почему то по строкам очень мало написано... Срочно нужна ваша помощь, на завтра,...

Задача по строкам (в несколько пунктов) - C++
Дана строка текста, в которой слова разделены пробелами и запятыми. Необходимо: а) определить количество слов длиной 3 символа;...

по строкам - C++
Пусть задан текст, заканчивающий точкой. Текст состоит из слов, разделенных пробелами. Слово последов. Русских cлов(как строчных, так и...

подскажите по строкам в С++ - C++
задание вот такое: Даны две строки, состоящие из слов, разделѐнных одним или несколькими пробелами. Из слов этих строк сформировать новую...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
17.04.2012, 17:37
Ответ Создать тему
Опции темы

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