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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
gelfer
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 5
#1

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

19.02.2012, 13:52. Просмотров 1801. Ответов 5
Метки нет (Все метки)

Добрый день, стоит такая задача:
Даны две строки. Определите, совпадают ли они сравнив их посимвольно. Напишите для этого функцию 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++
#include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;windows.h&gt; #include &lt;crtdbg.h&gt; #define _CRTDBG_MAP_ALLOC int main () { ...

Считывание числа из текстовика посимвольно - C++
в текстовом файле забито число(например 1368), нужно посимвольно его подсчитать и вывести на экран. цикл написал: for...

Считать посимвольно строку из консоли - C++
Добрый день! Необходимо в программе организовать считывание длинной строки из консоли. Строка настолько длинная, что записывать её в память...

Печать argv[i] в output посимвольно - C++
Пытаюсь напечатать элемент argv посимвольно. Компилятор выдает ошибку: error C2440: '=' : cannot convert from 'char *' to 'char '....

Чтение посимвольно из файла с пробелами - C++
Ребята, подкажте, в чем проблема в чтении файла? спасибо #include &quot;fstream&quot; #include &quot;string&quot; using namespace std; int main () { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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./--
560 / 560 / 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
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;//выходим сразу из цикла,
                                         // дальнейшее сравнение не нужно, они не равны
                                        
                                }       
                                
                        }
 
}
а лучше так. поясню.
меньше лишних вызовов функции длины т.е. если они по длине не равны то сразу выходим.
никакого цикла тогда не будет. если по длине равны - то цикл и проверяем только на неравенство
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2012, 14:19     Сравнение посимвольно
Еще ссылки по теме:

Считать посимвольно текст из файла - C++
Ребят помогите, необходимо написать программу, которая считывает посимвольно текст из файла, заносит эти символы в массив типа char и потом...

Обращение посимвольно к строки из файла - C++
Нужно считать с файла строки по типу, как ниже, но как после этого обратится к конкретному символу. Допустим 5й элемент сделать верхнего...

Посимвольно считать из переменной строку - C++
Добрый вечер Нам задали написать программу &quot;Азбука МОРЗЕ&quot; Какой функцией считать посимвольно строку, например &quot;.--.&quot; Мне нужен...

Вывож текста в окно посимвольно - C++
Подскажите, пожалуйста, спомощу какого класса MFC можно вывести текст в окно посимвольно? Ну как в ДОСе putchar и т.д Заранее спасибо.

Замена регистра букв посимвольно - C++
Вводится последовательность N символов. Вывести последовательность символов, заменяя каждую большую букву латиницы на малую .Считывания...

Как сравнить массивы посимвольно? - C++
Есть 2 массива типа char. В каждом из них содержится набор символов. Как определить количество вхождений текста из первого массива в текст...


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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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     Сравнение посимвольно
Ответ Создать тему
Опции темы

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