Форум программистов, компьютерный форум CyberForum.ru

Сравнение посимвольно - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
gelfer
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 5
19.02.2012, 13:52     Сравнение посимвольно #1
Добрый день, стоит такая задача:
Даны две строки. Определите, совпадают ли они сравнив их посимвольно. Напишите для этого функцию bool Compare(string S1, string S2).
Вход: две строки. Выход: слово yes, если строки совпадают, слово no в противном случае.


Проблема, если посмотреть по коду ниже, заключается в том, что каждый символ она проверят, и выдает по нему true/false и записывает это в переменную Compare , но при этом каждый раз когда цикл запускается заново и переменная перезаписывается.
Будьте добры, помогите с кодом, расскажите как будет правильно, и если можно с пояснениями. Заранее благодарен!

Код
#include <iostream>
#include <string>
using namespace std;

int main()
{
	string S1,S2;
	bool Compare=false;
	cout<<"Enter first and second word";
	cin>>S1>>S2;
	
			for(int i=0; i<S1.length() && i<S2.length(); i++)
			{
				if(S1[i]==S2[i] )
				{
					if( S1.length()==S2.length())
					{
					Compare=true;
					}
				}	
				else
				{
					Compare=false;
			
			
				}
		
			}
		
	if(Compare=true)
		cout<<"yes";
    else if(Compare=false)
		cout<<"no";
	

	
	return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2012, 13:52     Сравнение посимвольно
Посмотрите здесь:

C++ Считывание числа из текстовика посимвольно
C++ Чтение посимвольно из файла с пробелами
Вывож текста в окно посимвольно C++
C++ Считать посимвольно текст из файла
Посимвольно считать из переменной строку C++
C++ Строки, обращение посимвольно
Считывание посимвольно файл C++
C++ Считать посимвольно строку из консоли
Как посимвольно считать данные из блокнота C++
C++ Посимвольно передать элементы массива в функцию
Печать argv[i] в output посимвольно C++
Обращение посимвольно к строки из файла C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
19.02.2012, 13:59     Сравнение посимвольно #2
Цитата Сообщение от gelfer Посмотреть сообщение
if(Compare=true)
* * * * * * * * cout<<"yes";
* * else if(Compare=false)
* * * * * * * * cout<<"no";
если это с\с++ то не = а ==, если хотелось сравнения а не присваивания



в самом цикле break ставим. если есть хоть одно различие то строки не равны
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for(int i=0; i<S1.length() && i<S2.length(); i++)
                        {
                                if(S1[i]==S2[i] )
                                {
                                        if( S1.length()==S2.length())
                                        {
                                        Compare=true;
                                        }
                                }       
                                else
                                {
                                        Compare=false;
                                        break;//выходим сразу из цикла,
                                         // дальнейшее сравнение не нужно, они не равны
                        
                                }
                
                        }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Compare=true;
if( S1.length()==S2.length())
for(int i=0; i<S1.length() && i<S2.length(); i++)
                        {
                                if(S1[i]!=S2[i] )
                                {                                       
                                       
                                        Compare=false;
                                        break;//выходим сразу из цикла,
                                         // дальнейшее сравнение не нужно, они не равны
                                        
                                }       
                                
                        }
WebMax 2.0
--\.founder./--
 Аватар для WebMax 2.0
558 / 558 / 206
Регистрация: 20.10.2011
Сообщений: 867
19.02.2012, 14:04     Сравнение посимвольно #3
Хотя я в строках С ++ пока не силен:

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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    setlocale (LC_ALL,"rus");
        string S1,S2;
        bool Compare=true;
        cout<<"Введите две строки: ";
        cin>>S1>>S2;
        
                        for(int i=0; i<S1.length() && i<S2.length(); i++)
                        {
                                if(S1[i] != S2[i] )
                                {
                                   Compare=false;
                                   break;                        
                                }
                
                        }
                
        if(Compare==true)
                cout<<"yes";
        else 
                cout<<"no";
        
 
        system("pause");
        return 0;
}
gelfer
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 5
19.02.2012, 14:07  [ТС]     Сравнение посимвольно #4
Всем спасибо, все заработало, ошибка конечно- же в присваивании.
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
19.02.2012, 14:08     Сравнение посимвольно #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if( S1.length()==S2.length())
{
Compare=true;
for(int i=0; i<S1.length() && i<S2.length(); i++)
                        {
                                if(S1[i]!=S2[i] )
                                {                                       
                                       
                                        Compare=false;
                                        break;//выходим сразу из цикла,
                                         // дальнейшее сравнение не нужно, они не равны
                                        
                                }       
                                
                        }
 
}
а лучше так. поясню.
меньше лишних вызовов функции длины т.е. если они по длине не равны то сразу выходим.
никакого цикла тогда не будет. если по длине равны - то цикл и проверяем только на неравенство
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
19.02.2012, 14:19     Сравнение посимвольно #6
Если сделать вид, что мы не в курсе про перегруженные операторы == и != и функцию std::string::compare, можно вот так ещё сделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
 
bool Compare(const std::string & a, const std::string & b){
    if ( a.length() != b.length() )
        return false;
    for ( size_t i = 0; i < a.length(); ++i )
        if ( a[i] != b[i] )
            return false;
    return true;
}
 
int main(void){
    std::string a, b;
    
    while ( std::cout << "First: " && std::getline(std::cin, a) && ! a.empty()
        && std::cout << "Second: " && std::getline(std::cin, b) && ! b.empty() )
            std::cout << ( Compare(a, b) ? "YES" : "NO" ) << std::endl;
    
    return 0;
}
Yandex
Объявления
19.02.2012, 14:19     Сравнение посимвольно
Ответ Создать тему
Опции темы

Текущее время: 09:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru