porównywanie znaków - C++

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Puszek
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 28 kwie 2008, 16:58
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86
Kontakt:

porównywanie znaków - C++

Post autor: Puszek »

Kod: Zaznacz cały


#include <sstream>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
	int grupa_1();
	{
		int podgrupa; 
		
			std::string strNapis;
			
				std::cout << "Podaj Pierwszy Znak : ";
				std::cin >> strNapis;
			
			int liczba;
			
				std::cout << "Podaj wartosc : ";
				std::cin >> liczba;
			std::string strNapis_2;
			
				std::cout << "Podaj drugi Znak : ";
				std::cin >> strNapis_2;
			
			int liczba_2;
			
				std::cout << "Podaj wartosc : ";
				std::cin >> liczba_2;
			
			std::string strNapis_3;
			
				std::cout << "Podaj trzeci Znak : ";
				std::cin >> strNapis_3;
			
			int liczba_3;
			
				std::cout << "Podaj wartosc : ";
				std::cin >> liczba_3;
			std::string strNapis_4;
			
				std::cout << "Podaj czwarty Znak : ";
				std::cin >> strNapis_4;
			
			int liczba_4;
			
				std::cout << "Podaj wartosc : ";
				std::cin >> liczba_4;

//suma kontrolna

				std::cout << strNapis << liczba << strNapis_2 << liczba_2 << strNapis_3 << liczba_3 << strNapis_4 << liczba_4 << std::endl;
	

	int grupa_2();
	{
		int podgrupa_2; 
		
			std::string strNapis_5;
			
				std::cout << "Podaj Pierwszy Znak Drugiej Grupy : ";
				std::cin >> strNapis_5;
			
			int liczba_5;
			
				std::cout << "Podaj wartosc : ";
				std::cin >> liczba_5;
//suma kontrolna2

				std::cout << strNapis << liczba << std::endl;
		
//zamiana znaku na liczbe				

				string str = "strNapis";
				int i;
				istringstream iss(str);
				iss >> i;
				
				string str_2 = "strNapis_2";
				int i_2;
				istringstream iss_2(str_2);
				iss_2 >> i_2;
				
				string str_3 = "strNapis_3";
				int i_3;
				istringstream iss_3(str_3);
				iss_3 >> i_3;
				
				string str_4 = "strNapis_4";
				int i_4;
				istringstream iss_4(str_4);
				iss_4 >> i_4;
				
				string str_5 = "strNapis_5";
				int i_5;
				istringstream iss_5(str_5);
				iss_5 >> i_5;
				

                             if ( i_5 == i )
                              {
                              std::cout << " warunek który powinien być spełniony przy wciśnięciu np. jako strNapis D i jako strNapis_5 D " << std::endl;
                              }
                             else
                              {
                              std::cout << " jesli warunek nie zostanie spelniony czyli strNapis bedzie rozne od strNapis_5 to wyswietli sie to co tu napisalem" << std::endl;
                              }	
	}
		
	}
	
	
}		
			
		

1. Podaję literę np. D
2. Podaję drugą literę D (także D aby spełnić zależność)
3. Konwertuję litery na cyfry którymi są reprezentowane w komputerze
4. Porównuje czy "cyfry D" są takie same jak "cyfry D" z drugiego podpunktu
5 Jeżeli tak to.... dalsza instrukcja np. przy wyświetlaniu, jeżeli nie wyświetl tekst który ustawiłem

Czy to co chcę zrobić w praktyce jest możliwe ?. Jeśli tak to dlaczego zawsze bez względu na to czy D = D czy D = R zawsze wskakuje else
Moraxus
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 05 kwie 2008, 22:29
Płeć: Mężczyzna
Wersja Ubuntu: 7.10

Odp: porównywanie znaków - C++

Post autor: Moraxus »

Twoje rozwiązanie jest conajmniej dziwne.
Piszesz

Kod: Zaznacz cały

	string str = "strNapis";
				int i;
				istringstream iss(str);
				iss >> i;
I co chcesz mieć w i?
Nie zmieścisz 8 bajtowego stringa w 4 bajtowym int.
Puszek
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 28 kwie 2008, 16:58
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86
Kontakt:

Odp: porównywanie znaków - C++

Post autor: Puszek »

jak powinienem to zrobić ?. Jeżeli int jest 4 bajtowy to rozumiem, że część tych bajtów zostanie obcięta. Tak czy siak przy przy obcięte zostanie i "i" i "i_5" więc jeśli będzie to 2x np. to wynik powinien być sobie równy. Dobrze myślę ?.
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: porównywanie znaków - C++

Post autor: mikolajs »

iss >> i;
gdyby napis składał się np "3938" to zostałby zapisany do int, ale nie zamienisz tak zwykłego stringa na liczbę (wydrukuj na ekran i to zobaczysz tam 0). String przecież jest tablicą (naprawdę kontenterem) liczb 8bitowych. Jeżli instrukcja string1 == string2 porównuje napisy to tak naprawdę podrównuje po kolei wszystkie wartości w kolejnych bajtach. Co zatem chcesz zrobić? Można zrobić hash stringa np. 8 znaków (ale bez polskich) w long long int który jest 8B-towy
Moraxus
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 05 kwie 2008, 22:29
Płeć: Mężczyzna
Wersja Ubuntu: 7.10

Odp: porównywanie znaków - C++

Post autor: Moraxus »

A tak wogóle, to po co ci wogóle ta konwersja na int?
Nie możesz napisać if(str==str_5) ?
Puszek
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 28 kwie 2008, 16:58
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86
Kontakt:

Odp: porównywanie znaków - C++

Post autor: Puszek »

Moraxus, nic mi to nie daje, nadal wyświetlana jest tylko fraza else nie zależnie od tego czy D == D czy D==R

Dobra działa, usunąłem kod odpowiedzialny za zmianę literek na liczby i porównałem if(strNapis==strNapis_5)

Proszę o nie zamykanie wątku gdyż będę starał się tu pisać o moich problemach.

EDIT:
czy można zrobić taki myk :

std::cout << "liczba :" << if ( liczba == 1 ) { std::cout << " "; } else { std::cout << liczba; } << std::endl;

?
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: porównywanie znaków - C++

Post autor: Hauleth »

to się robi inaczej:

Kod: Zaznacz cały

std::cout << "liczba:" << ( ( liczba == 1 ) ? "" : liczba ) << '\n';
BTW
Staraj się nie używać endl tylko \n bo wtedy szybkość cout'a diabli wezmą.
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
Puszek
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 28 kwie 2008, 16:58
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86
Kontakt:

Odp: porównywanie znaków - C++

Post autor: Puszek »

mógłbyś napisać za co odpowiada ten "?" i dalsza część kodu ?.

EDIT:
error: operand to ?: have diferent types 'const char*' and 'int'
Moraxus
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 05 kwie 2008, 22:29
Płeć: Mężczyzna
Wersja Ubuntu: 7.10

Odp: porównywanie znaków - C++

Post autor: Moraxus »

"" jest typu const char * a liczba jest typu int.

Napisz:

Kod: Zaznacz cały

std::cout << "liczba:" << ( ( liczba == 1 ) ? (char)0x20 : liczba ) << '\n';
Zamiast "" będziesz miał spacje.
Puszek
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 28 kwie 2008, 16:58
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86
Kontakt:

Odp: porównywanie znaków - C++

Post autor: Puszek »

wszystko ładnie tylko zamiast tej spacji w miejsce 1 wstawia mi liczbę 32....

co mam zrobić aby mieć tą spację zamiast 1 ( jeszcze lepszym rozwiazaniem byloby gdyby nie bylo zadnej spacji. )

EDIT:
pytanie, jak wyciagnac zmienna lokalna z if'a i uzyc jej poza ifem

przyklad:

if (warunek)
{
int zmienna = inna_zmienna + druga_inna zmienna;
}
std::cout << zmienna << std::endl;
Moraxus
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 05 kwie 2008, 22:29
Płeć: Mężczyzna
Wersja Ubuntu: 7.10

Odp: porównywanie znaków - C++

Post autor: Moraxus »

Nie ma takiej możliwości (po to są zasięgi), musisz zadeklarować zmienną poza ifem.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości