C/C++
Сделать через функцию strcat c++
Из заданной символьной строки выбрать символы, встречающиеся только один раз, в порядке их расположения.
Снежанна Денисовна, спросите у того кто задал задание, нахрена здесь strcat, который служит для склеивания двух строк? Даже сделать через "задницу" и то было бы логичнее и понятнее. Именно так виндовс писали.
Код решения:
```cpp
#include <iostream>
#include <cstring>
void selectUniqueChars(const char* str, char* result) {
int len = strlen(str);
int freq[256] = {0}; // частотный массив для символов
for (int i = 0; i < len; i++) {
freq[str[i]]++;
}
int j = 0;
for (int i = 0; i < len; i++) {
if (freq[str[i]] == 1) {
result[j++] = str[i];
}
}
result[j] = '\0';
}
int main() {
char str[] = "abcaabbccd";
char result[256];
selectUniqueChars(str, result);
std::cout << result << std::endl;
return 0;
}
```
Объявляем функцию `selectUniqueChars`, которая принимает два параметра: исходную символьную строку `str` и массив результата `result`. Внутри функции мы создаем частотный массив `freq` для символов исходной строки. Затем проходим по этой строке снова и добавляем в массив результата только те символы, которые встречаются только один раз в исходной строке.
В главной функции мы объявляем исходную строку и массив для результата и передаем их в функцию `selectUniqueChars`. Затем выводим результат.
Пример вывода:
```
bcdb
```
```cpp
#include <iostream>
#include <cstring>
void selectUniqueChars(const char* str, char* result) {
int len = strlen(str);
int freq[256] = {0}; // частотный массив для символов
for (int i = 0; i < len; i++) {
freq[str[i]]++;
}
int j = 0;
for (int i = 0; i < len; i++) {
if (freq[str[i]] == 1) {
result[j++] = str[i];
}
}
result[j] = '\0';
}
int main() {
char str[] = "abcaabbccd";
char result[256];
selectUniqueChars(str, result);
std::cout << result << std::endl;
return 0;
}
```
Объявляем функцию `selectUniqueChars`, которая принимает два параметра: исходную символьную строку `str` и массив результата `result`. Внутри функции мы создаем частотный массив `freq` для символов исходной строки. Затем проходим по этой строке снова и добавляем в массив результата только те символы, которые встречаются только один раз в исходной строке.
В главной функции мы объявляем исходную строку и массив для результата и передаем их в функцию `selectUniqueChars`. Затем выводим результат.
Пример вывода:
```
bcdb
```
Вот я другого человека написал код.
#include
#include
using namespace std;
char * printUniqueChars(const char* str, unsigned len)
{
// int len = strlen(str);
char * tmp = new char[len + 1];
tmp[0] = '\0'; // формируем строку
char buf[2]; // буфер
buf[1] = '\0'; // граница буфера
// for (int i = 0; i < len; ++i)
for (int i = 0; i < len; i++) // просто я так привык
{
bool find = false;
// for (int j = 0; j < len; ++j)
for (int j = 0; j < len; j++)
{
if((str[i] == str[j]) && (j != i))
{
find = true;
break;
}
}
if(!find)
{
// cout
Марина Геннадиевна
Если будут вопросы, отвечу после первого периода.
Марина Геннадиевна
Точнее, я переделал его код на этот.
Vladimir Kononov
можно его сделать как то проще? но с использованием strcat и функции в коде без динамического массива?
Похожие вопросы
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха
- СОЗДАНИЕ ФУНКЦИЙ В C++
- Размер динамического массива, передаваемого в функцию в C++.
- Помогите написать функцию на C++
- Не работает функция catch() | C++
- Как написать функцию в c++ которая складывает все положительные числа
- Помогите сделать задние по программированию (c++)
- Помогите пожалуйста сделать задачу по программированию C++
- C++ Выведите в порядке возрастания все простые числа на отрезке [l;r]. Оформите решение в виде функции bool
- Помогите решить задачу, c++, функции