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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.92
Un Oom
0 / 0 / 0
Регистрация: 19.06.2012
Сообщений: 20
#1

Длина текста не больше 150 символов, могут быть использованы любые символы - C++

19.06.2012, 22:25. Просмотров 3204. Ответов 7
Метки нет (Все метки)

Задание:
Задан текст, состоящий из слов, записанных через запятые и/или пробел, и заканчивающийся точкой. Длина текста не больше 150 символов, могут быть использованы любые символы. Словом считается последовательность символов, не содержащая пробел. Сформировать новую строку из 7-символьных слов, состоящих из латинских букв, не имеющих аналогов записи в русском языке. Найти первое цифровое слово, возвести его в квадрат и в куб. Полученные три числа записать в виде массива.


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
#include "iostream.h"
#include "conio.h"
#include "stdio.h"
 
using namespace std;
 
void main ()
{
setlocale(0, "Rus");
// объявление переменных 
int i,j,k,per,prov,o,result;
char st1[150], st2[150]/*результат строка с 7 -ми символьными словами*/, st3[150]/*цифровое слово*/; 
 
// ввод текста
cout « "Введите текст " «endl;
gets(st1);
// посчет количества символов в строке
i = 0; 
while (st1[i]) {i++; per = i;}
 
 
// поиск цифрового слова
i = 0;
j = 0;
k = 0;
o = 0;
prov = 10;
while (st1[i])
{
if (st1[i]>='0' && st1[i]<='9') 
{
st3[k]=st1[i]; 
k++; 
}
if (st1[i]!= ' ') {o = i-o; if (o == k){result = k; break;}}
i++;
}
cout « result « endl;
// формирование строки из 7-символьных слов 
i = 0;
j = 0;
k = 0;
prov = 10;
while (st1[i] && prov >=7)
{
if (st1[i]>='a' && st1[i]<='z' && st1[i]!= 'a' && st1[i]!= 'c' && st1[i]!= 'e' && st1[i]!= 'p' && st1[i]!= 'o')
{/*cout « st1[i];*/ j++; st2[k] = st1[i]; k++; }// result = result + st1[i];}
 
if (j == 7) {/*cout « ' '*/st2[k]=' '; j = 0; k++; }//result =result + ' '; }
prov = per - i;
i++;
}
i = 0;
while (st2[i] && i!=k)
{cout «st2[i]; 
i++;
}
Пожалуйста помогите мне её доделать.срочно надо до завтра!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 22:25     Длина текста не больше 150 символов, могут быть использованы любые символы
Посмотрите здесь:
Нужно сделать условие что вводимые числа не могут быть больше 8 C++
C++ Определить длину введенной строки, и, если длина больше заданной, то удалить символы от a до z
C++ Если длина строки больше 10 - оставить первые 6 символов, иначе дополнить строку символами 'о'
C++ Сколько и какие символы использованы в строке
C++ Создать очередь, содержащую любые символы. Удалить из очереди все символы, не являющиеся буквами или цифрами
C++ я учусь на высшке на программиста.. какие могут быть задачи на экзамене 1й курс .2й семестр!!.. должны быть классы!!
C++ Ввести строку символов. Определить длину введенной строки L, и если длина L кратна 3, то удаляются все символы, стоящие на местах с номером кратным 3
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
19.06.2012, 22:27     Длина текста не больше 150 символов, могут быть использованы любые символы #2
По идее цифровое слово, это слово состоящее только из цифр. Я так и не понял, слова разделяются пробелами или пробелами/запятыми?
Un Oom
0 / 0 / 0
Регистрация: 19.06.2012
Сообщений: 20
19.06.2012, 22:30  [ТС]     Длина текста не больше 150 символов, могут быть использованы любые символы #3
darkknight2008, ну можно и так и так
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
19.06.2012, 22:31     Длина текста не больше 150 символов, могут быть использованы любые символы #4
Слова в строке можно искать с помощью функции strtok, но стоит учесть, что эта функция изменяет строку. Т.е. вызывает эту функцию - находим разделяющий символ. Считай у нас есть начало и конец слова, если это слово только из цифр, то оно подходит под условие. Преобразуешь это слово в число и возводишь в квадрат и куб.

Добавлено через 56 секунд
На счет следующего. 7-ми символьные слова - это слова из семи символов или что-то другое?
Un Oom
0 / 0 / 0
Регистрация: 19.06.2012
Сообщений: 20
19.06.2012, 22:32  [ТС]     Длина текста не больше 150 символов, могут быть использованы любые символы #5
darkknight2008, если честно))я ничего не поняла...я в С++ не понимаю..помогите пожалуйста

Добавлено через 24 секунды
darkknight2008, да слова из 7 символов
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
19.06.2012, 22:33     Длина текста не больше 150 символов, могут быть использованы любые символы #6
Если это семь символьных слов, то что делать, если в веденной строке не будет семи таких слов?
Un Oom
0 / 0 / 0
Регистрация: 19.06.2012
Сообщений: 20
19.06.2012, 22:37  [ТС]     Длина текста не больше 150 символов, могут быть использованы любые символы #7
а вот этот код будет правильный:

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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <locale.h>
 
bool isnum(char* psz);
bool iscyrr(char* psz);
 
int main()
{
    setlocale(LC_ALL,"Russian");
 
    static char* psz = "apple fruit 256 verdict plumb viaduct cocktail aquarel\0";
 
    char* buf = psz; bool num = false;
    while ((buf = strchr(buf,' ')) != NULL && *psz != '\0')
    {   
        char temp[256] = "\0"; int n = 0;
        while (*psz != *buf && *psz != '\0') 
            temp[n++] = *psz++;
        temp[n] = '\0'; *psz++;
    
        if (isnum(temp) && !num)
        {
            printf("%d - %d - %d\n",atoi(temp),
                (int)pow((double)atoi(temp),2),
                (int)pow((double)atoi(temp),3));
            num = true;
        }
        
        else if (strlen(temp) == 7 && !iscyrr(temp))
            printf("%s\n",temp);
    }
 
    _getch();
 
    return 0;
}
 
bool iscyrr(char* psz)
{   
    bool found = false;
    for (int i = 0; psz[i] != '\0' && !found; i++)
        found = (psz[i] >= 'а' && psz[i] <= 'я') ? 1 : 0;
    return found;
}
 
bool isnum(char* psz)
{
    bool found = false;
    for (int i = 0; psz[i] != '\0' && !found; i++)
        found = (isalpha(psz[i])) ? 1 : 0;
    return !found;
}
Добавлено через 38 секунд
darkknight2008, я не знаю,честно говоря

Добавлено через 4 минуты
darkknight2008, ?он правильный или нет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 23:26     Длина текста не больше 150 символов, могут быть использованы любые символы
Еще ссылки по теме:
C++ Пользователь вводит с клавиатуры слово длинной больше 7 символов. Программа выводит 4-7 символы этого слова на
Задана строка, символы которой могут повторяться. Нужно удалить все символы строки с помощью наименьшего количества вычеркиваний C++
Дана строка текста.Определить сколько в ней символов больше . а или о C++

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

Или воспользуйтесь поиском по форуму:
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
19.06.2012, 23:26     Длина текста не больше 150 символов, могут быть использованы любые символы #8
Предположим есть у тебя строка со словами str.
Нужно выделить в ней все слова и их обработать.
Т.е. первое - будет цикл, который будет перебирать все слова.
Функция strtok(str, toFind) - она ищет в строке str первую встречу любого символа из строки toFind. И вместо найденного слова он ставит символ с кодом 0.
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
char *inc = strtok(str, "."); // Ищем точку в строке.
if (inc == NULL) // Точки в строке нет
{
   cout << "Неверная строка!\n";
   return;
}
 
char *inc = strtok(str, " "); // Находим пробел - признак конца слова
do
{
  // В данный момент str указывает на начало слова, а inc на его конец.
  if (str != inc) // str может начаться с пробела, и при поиске мы наткнемся сразу на него.
                     // т.е. слова не будет. Поэтому проверяем не совпали ли у нас начало и конец
  {
    isNumber = 1;
    //В данный момент str указывает на начало слова и в конце слова стоит символ конца строки.
    while (*str != 0)
    {
       if (*str < '0' || *str > '9') // Если в слове есть знаки отличные от цифр, то это не число
       {
         isNumber = 0;
         break;
       }
       if (isNumber == 1)
       {
          //Если слово число - то выполняешь нужные действия
          // Типа распознаешь его, возводишь в квадрат, куб.
       }
 
       // Проверяешь длину слова, если она 7, то проверяешь дальше
       // Пробегаешь опять по всему слову, если там только символы не похожие на русские, то
       // слово тоже удовлетворяет условию - обрабатываешь его.
    }
  }
  str = inc + 1; // Встаем на следующий символ после найденного
  inc = strtok(NULL, " "); // Ищем следующую встречу пробела.
} while (inc != NULL)
Добавлено через 20 минут
Я не вдавался в подробности в твоем примере. Но есть некоторые моменты:
1) Конец строки должна быть точка - но можно ее проверить как я писал в своем.

Добавлено через 7 минут
Вообще остальное похоже на правду, но точно сказать не могу. Прогони по примерам. Поставь пару пробелов в начале, поставь несколько в конце, поставь побольше пробелов между словами.
Yandex
Объявления
19.06.2012, 23:26     Длина текста не больше 150 символов, могут быть использованы любые символы
Ответ Создать тему
Опции темы

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