• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Перевод Массива Int В Строку Char

  • Автор темы kingl
  • Дата начала
K

kingl

вот задание: Ввести строку из цифр и если ее длина >6, удалить из нее цифры, кратные 3, записав их в другую строку.
Вопрос в том, что перевести из char в int у меня получилось, убрать числа кратные трем тоже вроде не проблема, а вот записать преобразованный массив int в строку char не получается... Вот код который работает до преобразования в char ( получается массив str1 нужно преобразовать в строку char str2, и как я понимаю нужно каждый элемент массива str1 сначала преобразовать в элемент char, а потом все это записать в строку, и еще, избежать вот такого преобразования str2=str1+48):

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
#include <string.h>
#include <ctype.h>

void f(char*, char*, int*, int*);

void main()
{
char *str, *str2;
int i, *str1, *n1, dlina;
n1=&dlina;
setlocale(LC_CTYPE, "RUSSIAN");
str = (char *)malloc((100)*sizeof(char)); // Динамическое выделение памяти
str1 = (int *)malloc((100)*sizeof(int));
str2 = (char *)malloc((100)*sizeof(char));
printf("Введите строку: "); // Вводим строку
scanf("%s",str);
dlina=strlen(str); // Длина строки

if(dlina>6) // Если длина строки больше 6, ищем числа кратные трем
{
printf("\nИсходная строка %s \n", str);

f( str2, str, str1, n1);
printf("\n");
}
else
{
printf("\nКоличество символов меньше 6\n");
printf("\nСтрока не требует преобразования %s", str);
}
free(str);
free(str1);
free(str2);
}
void f(char* str2, char* str, int* str1, int* n1)
{int i, p;
char ch;
printf("Преобразованная строка\n");
for (i=0; i<*n1; i++)
{
ch=*(str+i);// присваиваем ch значение i-го элемента строки str
str1=atoi(&ch);// переводим значение ch в тип int
if ((*(str1+i))%3>0)// выводим элементы массива без элементов кратных 3
printf("\t %d", *(str1+i));
}
}
 
W

Whatka


мне просто интересно,а как вы функцию atoi нашли?_)
 
K

kingl


мне просто интересно,а как вы функцию atoi нашли?_)
Я читал эту тему, но не получается у меня применить itoa, или я такой тупой, или я уже просто пересидел за компом) преобразовывает но выводится ерунда какая-то(

Добавлено: и вот мой кусок кода с itoa:


void f(char* str2, char* str, int* str1, int* n1)
{int i, p;
char ch;
for (i=0; i<*n1; i++)
{
ch=*(str+i);
str1=atoi(&ch);
if ((*(str1+i))%3==1)
p=*(str1+i);
itoa(p,(str2+i),10);
}str2[*n1]='\0';
printf("Преобразованная строка %s \n", str2);
}
 
W

Whatka

попробуйте санчала 1 цифру преобразовать в char (str1) и есть ещё такая замечательная функция strcat
 
K

kingl

Алилуя) я сделал эту задачу, но мне не нравится что много массивов, сейчас попробую сократить код, а вот рабочий код:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
#include <string.h>
#include <ctype.h>

void f(char*, char*, int*, int*, int*);

void main()
{
char *str, *str2;
int i, *str1, *str11, *n1, dlina;
n1=&dlina;
setlocale(LC_CTYPE, "RUSSIAN");
str = (char *)malloc((100)*sizeof(char)); // Динамическое выделение памяти
str1 = (int *)malloc((100)*sizeof(int));
str11 = (int *)malloc((100)*sizeof(int));
str2 = (char *)malloc((100)*sizeof(char));

printf("Введите строку: "); // Вводим строку
scanf("%s",str);
dlina=strlen(str); // Длина строки

if(dlina>6) // Елси длин строки больше 6, ищем числа кратные трем
{
printf("\nИсходная строка %s \n", str);

f( str2, str, str1, str11, n1);
}

else
{
printf("\nКоличество символов меньше 6\n");
printf("\nСтрока не требует преобразования %s", str);
}

free(str);
free(str1);
free(str2);
}
void f(char* str2, char* str, int* str1, int* str11, int* n1)
{int i, p, k=0;
char ch;
for (i=0; i<*n1; i++)
{
ch=*(str+i);
str1=atoi(&ch);
if ((*(str1+i))%3>0)
{*(str11+k)=*(str1+i);
k++;}
}
for (i=0; i<*n1; i++)
{ p=*(str11+i);
itoa(p,(str2+i),10);}
str2[k]='\0';
printf("Преобразованная строка %s \n", str2);
}
 
K

kingl

Вот конечный вариант, может кому полезно будет, потому что на эту тему я мало совсем понятных примеров нашел:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
#include <string.h>
#include <ctype.h>

void f(char*, char*, int*, int*);

void main()
{
char *str, *str2;
int i, *str1, *n1, dlina;
n1=&dlina;
setlocale(LC_CTYPE, "RUSSIAN");
str = (char *)malloc((100)*sizeof(char)); // Динамическое выделение памяти
str1 = (int *)malloc((100)*sizeof(int));
str2 = (char *)malloc((100)*sizeof(char));

printf("Введите строку: "); // Вводим строку
scanf("%s",str);
dlina=strlen(str); // Длина строки

if(dlina>6) // Елси длин строки больше 6, ищем числа кратные трем
{
printf("\nИсходная строка %s \n", str);

f( str2, str, str1, n1);
}

else
{
printf("\nКоличество символов меньше 6\n");
printf("\nСтрока не требует преобразования %s", str);
}

free(str);
free(str1);
free(str2);
}
void f(char* str2, char* str, int* str1, int* n1)
{int i, p,z, k=0, l=0;
char ch;
for (i=0; i<*n1; i++)
{
ch=*(str+i);
str1[k]=atoi(&ch);//Преобразование char в int
k++;}
for (z=0; z<k; z++) {
if ((*(str1+z))%3>0)//Удаляем элементы кратные 3
{p=*(str1+z);
itoa(p,(str2+l),10);//преобразование массива int в строку char
l++;}
}

str2[z]='\0';
printf("Преобразованная строка %s \n", str2);
}
 
R

rrrFer

вот задание: Ввести строку из цифр и если ее длина >6, удалить из нее цифры, кратные 3, записав их в другую строку.

C++:
string str;
cin >> str; // ввели строку, но может быть не только из цифр
if (str.end() != find_if(str.begin(), str.end(), [](char c) { return c < '0' || c > '9'; })
return 1; // в строке не только цифры
if (str.length() < 6)
return 0; // если длина меньше 6 - ничего делать не надо?
string str2; // новая строка, в которой будут цифры не кратные 3

// помещаем цифры не кратные 3 в новую строку
for (auto t : str) 
if ((t - '0') % 3)
str2 += t;

// удаляем цифры не кратные трем
remove_if(str.begin(), str.end(), [](char c) { return (c - '0') % 3; });

// еще что-то? )

Вообще криво кнешно удалять символы из середины строки (со сдвигом) - правильнее создать новую строку - тогда remove_if не нужен - все делается в одном цикле...

Код:
for (auto t : str) 
if ((t - '0') % 3) str2 += t;
else str3 += t;
 
K

kingl

Спасибо) Но я еще только учусь, много не понятного в коде, но я разберусь)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!