Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 11.02.2016
Сообщений: 27

Строки

23.04.2016, 00:51. Показов 7303. Ответов 47

Студворк — интернет-сервис помощи студентам
Дана строка (char str[81]), состоящая из слов и разделителей. Слово – это непрерывная последовательность букв. Разделителями слов могут быть следующие символы: ! '' (двойные кавычки) ; : ? - . , [пробел]. Последовательности символов, не являющиеся словами (т.е. содержащие недопустимые символы), игнорировать. В строке найдите группы слов, имеющие одинаковый состав букв (количество одинаковых букв не имеет значения). Прописные и строчные буквы считать одинаковыми. Исходную строку не модифицировать. Слова выводить в порядке их вхождения в строку.
Формат входных данных. [строка]
Формат выходных данных. [1-е слово из 1-й группы слов] [пробел] [2-е слово из 1-й группы слов] [пробел] и т.д. [перевод строки] [1-е слово из 2-й группы слов] [пробел] [2-е слово из 2-й группы слов] [пробел] и т.д.; если искомых слов нет, то напечатайте сообщение «no solution». Слова выводить в порядке их вхождения в строку.
======================================== =================================

Подскажите пожалуйста, как реализовать 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
56
57
58
59
60
61
62
63
64
65
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include "string.h"
#include "ctype.h"
 
using namespace std;
 
 
int strToWords ( const char str[81], int words[40][2])
{
    char str2[81]; // Для копии имеющейся строки(чтобы не изменить данную)
    char pazdel[50] = { "!';:?-., " }; // Разделители слов
        int words_count=0; // Число слов в строке
 
 
    for (int i=0; i<strlen(str); i++)
    {
        if (isalpha(str[i]) || isalnum(str[i]))
        {
 
            words[words_count][0]=i;
 
            while (isalpha(str[i]) || isalnum(str[i]))
            {
                i++;
            }
            words[words_count++][1]=i-1;
        }
    }
 
    return words_count;    
}
 
 
 
int compareByContents( const char str1[21], const char str2[21])
{
    
}
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    char str[81]; 
    char str2[81]; // для преобразования слов в строчные
    int words[40][2];
    int Count_Words; // Число слов в строке
    
 
    cout << "Введите исходную строку:\n";
        gets_s(str);
 
    strlwr(str); // Преобразовали в строчные -???
    
 
    Count_Words=strToWords (str,words);// Число слов
    
    return 0;
    
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.04.2016, 00:51
Ответы с готовыми решениями:

Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки
Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки. 1. Я дуб дубом,даже...

Добавить строки, начиная со строки К1 и до строки К2, в динамический массив строк
Есть динамический массив строк. Заполняется, т.е. размер его уже известен будет. Но дальше нужно сделать задание: &quot;Добавить строки,...

Удалить строки, начиная со строки К1 и до строки К2 (динамические массивы)
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;stdlib.h&gt; using namespace std; int main() { srand((int)time(0)); ...

47
1 / 1 / 0
Регистрация: 11.02.2016
Сообщений: 27
23.04.2016, 17:17  [ТС]
Студворк — интернет-сервис помощи студентам
Ну как бы да, т.е необходимо чтобы слово из str1 имело такие же символы как str2, и наоборот(просто наличие их, не зависимо от кол-ва)

Добавлено через 29 секунд
Ну как бы да, т.е необходимо чтобы слово из str1 имело такие же символы как str2, и наоборот(просто наличие их, не зависимо от кол-ва
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.04.2016, 17:31
Mister X, смотрите что получится, ва просто надо 2 раза візвать функцию
C++
1
2
3
4
5
if(check = compareFunc("сabba","abc",5,3))
check  = compareFunc("abc","сabba",3,5);
 
if(check == false)
std::cout << "невходят, есть разные символы";
так смотрите еще раз вы все таки неправильно понимаете задание, чтобы проверить в обе стороны мы просто вызываем 2 раза и менем аргументы местами, но посмотрите на строки все буквы есть и там и там, у вас 2ой аргумент, тюе алфавит может быть с другими символами но входная строка нет, если она с недостающими то будет 0, и это не нюанс а правильное поведение, вы должны понимать что есть входная строка aaa а алфавит abc то все ок и єто правильно, но если наоборот, то не правильно, потому что у вас входная строка имеет только букву а из алфавита а если ві хотите в две стороны, то это как по мне бред в целом, потому что вам надо будет определять строку с наибольшим кол-вом уникальных символов, брать ее за алфавит и с ней сравнивать что не есть правильно, и то что мы "зависим" типо 1 аргумент строка 2ой алфавит єто нормально

Добавлено через 3 минуты
Mister X, просто смотрите, если вы будете передавать в обе стороні любой набор одинаковых символов то все ок, если у вас левый аргумент имеет те что не имеет правый, то будет 0, если наоборот то 1, и это нормально, если вам хотчется чтобы всегда 1 было что есть глупо(подумайте сами), то вам надо как то определять ту строку которая есть алфавит, и допустим параметр кол-во букв не катит

Добавлено через 56 секунд
Mister X, просто вы как программист можете регулировать что и куда передает поьзователь и это не ему решать скажем так, какая строка опорная а какая нет

Добавлено через 1 минуту
Mister X, просто по вашей логике при abcd и abc должно быть 1 и при abc и abcd должно быть 1, а когда же тогда 0 ?
0
1 / 1 / 0
Регистрация: 11.02.2016
Сообщений: 27
23.04.2016, 17:31  [ТС]
Идею вашу я прекрасно понял), но вот допустим я введу именно в таком порядке str1=ffg и str2=fff, и меня спросят : по вашему алгоритму(мне он реально по душе)-да, но мы глазами видим,что на самом то деле разный, вот такая дилемма)

Как тогда же это все впихнуть в главное тело, чтобы потом не было такого нюансика
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.04.2016, 17:38
Mister X, смотрите как стоит задание, определить состоит ли строка 1 из символов которые в строке 2, это задание и тут две стороны медали если я посмотрю как вы щас кинули то 1 строка не состоит полностью из букв второй, а если наоборот то состоит, тут даже сейчас не в программировании дело. вот если я спрошу вас

aa состоит из набора букв ab вы скажете конечно да
но если я вот так сформулирую вопрос,
ab состоит из набора букв aa то ві скажете нет
тут сейчас не пролема алгоритма, а восприятия

Добавлено через 54 секунды
Цитата Сообщение от Mister X Посмотреть сообщение
str1=ffg и str2=fff
да и вот тут ответ нет будет ) т.к 2 строка алфавит и в нем только буквы f,

Добавлено через 1 минуту
Mister X, просто давайте аналогию из жизни смотрите, двигатель состоит из запчастей, но запчасти не состоят из двигателей это скажем так не взаимо заменяемые параметры
0
1 / 1 / 0
Регистрация: 11.02.2016
Сообщений: 27
23.04.2016, 17:43  [ТС]
Задание состит в одинаковы ли две строки по составу букв:
возвращаемое значение - признак того, что строки имеют одинаковый состав букв (кол-во букв не учитывается): 1 – одинаковый состав, 0 – не одинаковый

А вот состоит ли строка 1 из символов которые в строке 2, по моему несет немного другой смысл, но опять же могу ошибаться

Добавлено через 2 минуты
просто давайте аналогию из жизни смотрите, двигатель состоит из запчастей, но запчасти не состоят из двигателей это скажем так не взаимо заменяемые параметры

А по составу мб и одинаковы, ведь оба сделаны из металла к примеру)вот такой антоним))-просто вы рассмотрели составную двигателя, но никак,то из какого материала сделан двигатель и запчасти-из металла)-криво, но думая смысл вы поняли моих мысле)
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.04.2016, 17:55
Mister X, ну у вас антоним не очень, я с такой же уверенностью могу сказать что на письме буквы состоят из чернил, а на компьютере из пикселей и кодов, но это не значит что они одинаковы и вообще весь мир состоит из атомов, так что я ходячий нейтрон ? Это не очень аналогия ))) вы должны понимать что группы атомов дают разные вещи, так например углерод может дать нам уголь или алмаз, но вы же не придете к продавцу и не скажете вот я вас углерод принес, где мои $100000

Добавлено через 1 минуту
не ну если вы пару милиардов тон принесете то вам может столько и дадут))))

Добавлено через 1 минуту
кароч вы меня надеюсь поняли )))
0
1 / 1 / 0
Регистрация: 11.02.2016
Сообщений: 27
23.04.2016, 17:56  [ТС]
Ну мб, ну просто у меня в голове никак не уложится как такие стрчоки str1=ffg и str2=ffgh могут иметь одинаковый состав букв, что вроде и подразумевается в задании, безусловно, str1 состоит из символов из str2, но состав символов str1 != str2
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.04.2016, 17:59
Mister X, я понял что вы хотите сделать за код и вообще искать вот если 1 слово состоит из тех букв что в другом и тд, но я не вижу это логичным, запрограмировать тоже могу, может попозже скину, но не считаю что данный подход правильный

Добавлено через 2 минуты
Mister X, а все, кароч я вас не понимал вы имели ввиду что и там и там должны быть одинаковые буквы, просто их кол-во вариаций разное, все я понял ))) скину код попозже
0
1 / 1 / 0
Регистрация: 11.02.2016
Сообщений: 27
23.04.2016, 17:59  [ТС]
Ну просто так по идее именно состав одинаковый нужен
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.04.2016, 18:00
я сам себя ввел в заблуждение просто и не понимал
0
1 / 1 / 0
Регистрация: 11.02.2016
Сообщений: 27
23.04.2016, 18:01  [ТС]
ДА) я вот сам начал сомневаться в своей логике уже, вроде вы так яростно отстаиваете, что я думаю мб я совсем уже поехал, а тут благо непонятка
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.04.2016, 18:01
Mister X, просто тут тогда так, состав 1 слова должен равнятся составу другого и обязательно и там и там должны быть все уникальные буквы которые присутствуют и в том и в другом вне зависимости от их количества )) такая формулировка мне понятна )))
1
1 / 1 / 0
Регистрация: 11.02.2016
Сообщений: 27
23.04.2016, 18:22  [ТС]
Да, я как понял вам такие задания изи, т.к вы вроде контейнерные типы проходили и ООП), а то тут я понимаю что надо, а как закодить фиг знает, смотришь на кучу функций строчный и не знаешь что куда лучше заюзать

Добавлено через 17 минут
И кстати
Например для уравнивания английского алфавита можно написать что-то подобное

C++
1
2
if(str[i] >= char(65) && str[i] <= char(90))
    str[i] += 32;
Как и говорилось для англ алфавита, все большие буквы находятся в позициях от 65 до 90, а прописные с 97 по 122, нехитрой математикой можно понять что разница кодов этих символов есть 32, и прибавляя к коду символа 32 мы получим его прописное аналог.
Ну а разделение выглядит как то так

Это по сути тоже что и strlwr(str2); ??
Если да, то разве мы не меняем символы, т.е мы не считаем их равными(как и в вашем случае), а просто присваиваем им новое значение

Вопрос возник потому, что думаю, как же потом вывести эти одинаковые по структуре слова, если мы их преобразовали, т.е было aaa AAA,сделали aaa aaa, но надо вывести снова aaa AAA
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.04.2016, 19:01
Лучший ответ Сообщение было отмечено Mister X как решение

Решение

Mister X, хранить копию исходной строки надо

Добавлено через 32 секунды
ну и сделать функцию обратного реобразования определенных в большие

Добавлено через 38 секунд
Mister X, если что написал вам примерный код, через часок кину как доберусь
1
1 / 1 / 0
Регистрация: 11.02.2016
Сообщений: 27
23.04.2016, 20:40  [ТС]
Охх, сложна)боюсь вы переоцениваете на данный момент мои навыки работы с С, начали кодить только 2.5 месяца назад...

Добавлено через 1 час 34 минуты
Mister X, если что написал вам примерный код, через часок кину как доберусь, это какой...
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.04.2016, 21:28
Лучший ответ Сообщение было отмечено Mister X как решение

Решение

Mister X,
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
#include <iostream>
#include <string>
#include <cstring>
 
void createAlphabet(char* str, int size, char* alphabet, int* alphabetSize) {
    bool uniq;
    for (int i(0); i < size; i++) {
        uniq = true;
        for (int j(0); j < *alphabetSize; j++)
            if (str[i] == alphabet[j]) {
                uniq = false;
                break;
            }
        if (uniq)
            alphabet[(*alphabetSize)++] = str[i];
    }
}
int checkStringForCorrect(char* str, int size, char* alphabet, int alphabetSize) {
    int count = 0;
    bool* check = new  bool[alphabetSize];
    for (int i(0); i < alphabetSize; i++)
        check[i] = false;
 
    for (int i(0); i < size; i++) {
        for (int j(0); j < alphabetSize; j++)
            if (str[i] == alphabet[j] && check[j] == false) {
                check[j] = true;
                count++;
                break;
            }
    }
 
    delete[] check;
    return count;
}
bool checkStringsForIdenteti(char* str1, char* str2, int sizeFirst, int sizeSecond) {
    int uniqSize = 0;
    char uniqSymbolsArray[80];
 
    createAlphabet(str1, sizeFirst, uniqSymbolsArray, &uniqSize);
    createAlphabet(str2, sizeSecond, uniqSymbolsArray, &uniqSize);
 
 
    return checkStringForCorrect(str1, sizeFirst, uniqSymbolsArray, uniqSize) == uniqSize
        && 
        checkStringForCorrect(str2, sizeSecond, uniqSymbolsArray, uniqSize) == uniqSize
        ? true : false;
}
int main(int argc, char* argv[]) {
    std::cout << checkStringsForIdenteti("oleg", "ggeol", 4, 5);
    std::cin.ignore();
    return 0;
}
сидел доделывал

Добавлено через 2 минуты
теперь смотри при подаче строк допустим,
oleg geol будет 1
oleg ggggeol будет 1
oooleg ggeol будет 1
olegf geolq будет 0 (т.к здесь 2 уникальных символа которых нет в противоположенных строках это f и q)
ну и так далее, т.е если строка любая содержит какойто уникальный символ то функция вернет false если любое кол-во в любом порядке но одинаковых символов true
надеюсь помог вам и теперь правильно понял задание

Добавлено через 2 минуты
только не забывайте менять размеры строк, в аргументе функции
C++
1
std::cout << checkStringsForIdenteti("oleg", "ggeol", 4, 5);
ибо будет непредсказуемое поведение, это можно пофиксить, т.е не передавать размер строки, но мне уже лень )))
там не сложно просто допишите код чтото тип в цикле там считаете кол-во элементов и по условию
C++
1
if(str[i] == '\0')
вы найдете конец строки, а кол-во элементов которое считали будет ее размер

Добавлено через 4 минуты
а по поводу задания как вернуть исходный размер, вот смотрите, у вас есть исходная строка, и та которая с нижним регистром, чтобы вторую вернуть на место чтото типо того можно написать
C++
1
2
if (str1[i] >= char(65) && str1[i] <= char(90) && str1[i] == str2[i] + char(32))
        str[i] -= 32;
я думаю здесь понятно, что str1 исходная строка (с большими буквами), а str2 это таже копия строки только с нижним регистром
1
1 / 1 / 0
Регистрация: 11.02.2016
Сообщений: 27
23.04.2016, 21:32  [ТС]
Ого,, СПАСИБО!конечно код круто,но по-моему немного профессионален
У вас даже есть незнакомые мне выполнения действий, а как то вообще реально укомпоновать без создания других функций( не описанных в задании) или будет очень плохо понятен?-т.к это запрещено по заданию
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.04.2016, 21:38
Mister X, ну если вам непонятно, я могу коментарии написать, но если вы хотите без функций там просто повторений кода банальных будет миллион, т.е одни и теже циклы и проверки и тд и в итоге эта програма будет занимать 100+ строк

Добавлено через 1 минуту
Цитата Сообщение от Mister X Посмотреть сообщение
но по-моему немного профессионален
не смущайте меня , здесь люди такое пишут что мне еще далеко до них
0
1 / 1 / 0
Регистрация: 11.02.2016
Сообщений: 27
23.04.2016, 21:41  [ТС]
Было бы неплхо 100+ понятного , чем 50 малопонятно

Добавлено через 1 минуту
не смущайте меня , здесь люди такое пишут что мне еще далеко до них

Ну все зависит безусловно от уровня, для моего - вы отлично кодите, но для вас естественно есть и более прошаренные, кто реально над серьезными проектами работает не первый год
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.04.2016, 21:42
Mister X, там точно такой же код будет просто вместо обобщенного в функциях str будет str1 в 1ом куске кода, а во втором str2, т.е бессмысленно писать без них, я предлагаю так, давайте я вам сейчас сделаю коментарии и вы попытаетесь трезво на это взглянуть, что не понятно объясню, ну и там кстати неодной функции я не использую, все самописное
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2016, 21:42

Удалить строки динамической матрицы, начиная со строки К1 и до строки К2
Сформировать динамический двумерный массив, заполнить его случайными числами и удалить строки, начиная со строки К1 и до строки К2 вот...

Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка содер-жится в ней
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка...

Даны три строки. Определить можно ли из символов третьей строки получить первую и вторую строки
Помогите пожалуйста! 1)Даны три строки. Определить можно ли из символов третьей строки получить первую и вторую строки. 2)Дана...

Ввести строки и через n символов первой строки вставить вторую строку, и так до конца строки
Помогите исправить баг задача состоит в следующем :ввести строку и простроку тоесть две строки и надо через (n) символов первой строки...

Слить две строки, вставив символы одной строки между символами другой строки
Строка a из n символов лексикографически меньше строки b из n символов, если существует такой индекс j, что aj &lt; bj, а для всех i &lt; j...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru