с++ ПЕРЕСТАНОВКА СИМВОЛОВ - продолжение задачи

начало - http://fkn.ktu10.com/?q=node/3376

изначально я полагал... возложить эту задачу на цикл, в котором создается третья (пустуя) строкя, в которую бы перемещал значения строки2. то есть:

if (str1[n] == str2[m])
t++;
str3[t]=str2[m]
n++
else 
m++;

результатом собственно треться строка и является
но потом решил что это равносильно

printf("строка2="str1)

т.к. t = n
и в качестве решения не годится. подумал и решил запилить что-то вроде алгоритма сортировки

baton's picture

///////////
ок, исправился

vedro-compota's picture

н-ный элемент строки1 равен м-ному элементу строки2.
н-ный элемент строки3 = м-ному элементу строки2;
н++;.... условие неравенства,ну и так далее.
на выход поставляется строка3.
с тем же успехом можно принтф строка1......

- типа конвертация си++ в русский язык?
интерпретатор моего мозга не настолько совершенен - если можно - пишите на русском - и правте сразу первый пост а не комментарий.

без антивируса туда лезть не стоит - каспер блокировал там какую-то дрянь.

так зачем же давать ссылки на такие сайты? - на крайняк - копипастите информацию в блок- и подсвечивайте код -
такие ссылки ударяд по репе и нашего ресурса тоже.
я сделал их неактивными .

_____________
матфак вгу и остальная классика =)

baton's picture

подумавши мы придумавши такое:

int x;
if(str1[n]==str2[m])
x = str2[n];
str2[n] = str2[m];
srt2[m] = x1;

и запилить это в цикл....

vedro-compota's picture

возложить эту задачу

я предлагаю начать описание со слов -

Формулировка задачи

Есть две строки, причём известно, что из первой с помощью перестановок символов можно получить вторую (проверяется так).
Требуется = написать алгоритм, а затем программу, выполняющую данную перестановку

вместо же формулировки словами мы опять видим некорректный код - который даже не оформлен в цикл - и что он работал (возможно) надо сделать "кучу допущений". =

запилить это в цикл....

в какой цикл? что вы будете в этом цикле изменять (какие счётчики) - это не очевидно.
так не пойдёт)))))))
я предлагаю вам продолжить формулировка задания.
Так как судя по всему мы не можете сходу внятно описать то, что собираетесь сделать.

_____________
матфак вгу и остальная классика =)

baton's picture

без реализации перестановки символов - оказывается условие саму перестановку не подразумевало.... надо было реализовать только проверку. перед сном подправлю цикл перестановки и опубликую всю - заявлена же была с перестановкой.
да, сегодня узнал полезную фишку - код элемента есть сам элемент. подробности см. в коде

#include "stdio.h"
#define _USE_MATH_DEFINES
#include "math.h"
#include "string"
#include "conio.h"
#include "iostream"
using std::cout;
using std::cin;
using std::endl;

void inputArray(char *str1, char *str2){ 					// объявление строк и переменных
		cout << "введите строку1: ";
		cin >> str1;
		cout << "введите строку2: ";
		cin >> str2;			
}

int how_many_simvol_in_str(char simb, char* str)
{
	int result = 0;
	for (int i = 0; str[i]; i++)
		if (str[i] == simb)
			result++;
	return result;
}


bool checkArray(char *str1, char *str2) {	 // первая проверка
	if (strlen(str1) != strlen(str2))
		return false;
	for (int i = 0; str1[i]; i++)
		if (how_many_simvol_in_str(str1[i], str1) != how_many_simvol_in_str(str1[i], str2))
			return false;
	return true;
}


bool checkArray2(char *str1, char *str2) {       // вторая проверка
	if (strlen(str1) != strlen(str2))
		return false;

	int chars1[256], chars2[256];
	memset(chars1, 0, sizeof(chars1));
	memset(chars2, 0, sizeof(chars2));

	for (int i = 0; str1[i]; i++) {
		chars1[str1[i]]++;      // полезная фишка - элемент массива номер которого есть код элемента строки
		chars2[str2[i]]++;
	}

	for (int i = 0; i < 256; i++)
		if (chars1[i] != chars2[i])
			return false;
	return true;
}


int main() { 
	setlocale(LC_ALL, "Russian");
    char str1[1000], str2[1000];
	int l, x;
	inputArray((char *) &str1, (char *) &str2);
	cout << checkArray((char *) &str1, (char *) &str2) << endl;
	cout << checkArray2((char *) &str1, (char *) &str2) << endl;
    getch () ;
    return 0 ;
}

прога выводит на экран два значения тру\фолс (от двух соответственно проверок). они, естественно, равны