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

Сравнение двух строк без учета пробелов - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Dantar
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 4
17.11.2012, 15:29     Сравнение двух строк без учета пробелов #1
Пишем в Microsoft Visual Studio 2010 -> Win32 Console Application -> C++
Задача такова: написать программу которая сравнивает две строки без учета пробелов. Моя идея состоит в том, чтобы сначала использовать функцию strtok на обоих строках, чтобы разбить строку на подстроки, т.е. каждая подстрока - это слово и записать эти подстроки в одну строку без пробелов, а потом использовать функцию strcmp которая собственно и сравнит строки.
Вот такой код:
Код
#include <iostream>
#include <time.h>
using namespace std ;
void main()
{
	setlocale(LC_ALL, "Russian") ;
	char str [50] ;
	cin.getline(str,50) ;
	char str1 [50] ;
	cin.getline(str1,50) ;
	char delimit[ ] = " " ;
	char * p ;
	char temp [50];
	p = strtok (str,delimit) ;
	/*char temp = *p ;
	cout << temp << endl;*/
	//for(int i = 0; i < 50; i++)
	//	{
	//		p = strtok (str,delimit) ;
	//		cout << p << endl;
	//		cout << "one" << endl;
	//		//temp = p;
	//		cout << temp << endl ;
	//		cout << "two" << endl;
	//	}
	p = strtok (str,delimit) ;
	while (p!=NULL)
	{
		cout << p << endl;
		temp = p;
		p = strtok(NULL,delimit) ;
		cout << p << endl;
		temp = p;
	}
	p = strtok (str1,delimit) ;
	while (p!=NULL)
	{
		cout << p << endl;
		temp1 = p;
		p = strtok(NULL,delimit) ;
		cout << p << endl;
		temp1 = p;
	}
	int p1 ;
	p1 = strcmp (temp,temp1) ;
	cout << temp << endl ;
	/*int strcmp(const char *s1, const char *s2); - Сравнивает две строки. Возвращает отрицательное значение, если s1<s2; нуль, если s1==s2;
	положительное значение, если s1>s2.*/
	if( p1 == NULL )
	{
		cout << "First str and second str is equality" << endl ;
	}
	else
	{
		if( p1 < 0 )
		{
			cout << "First str is the bigest !" << endl ;
		}
		else
		{
			if ( p1 > 0 )
			{
			cout << "Second str is the bigest !" << endl ;
			}
		}
	}
}
Пока основная проблема заключается в том как записать результат функции strtok во временную строку temp, ну и вообще в использовании функции strtok.

Прошу помочь с этим кодом, заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2012, 15:29     Сравнение двух строк без учета пробелов
Посмотрите здесь:

Сравнение двух строк C++
Сравнение строк (с игнорированием множественных пробелов) C++
Из двух заданных строк определить ту, которая содержит максимальную долю пробелов в ней C++
C++ Сравнение строк (с игнорированием множественных пробелов)
Сравнение двух строк C++
C++ Сравнение двух символьных строк
C++ Сравнение строк string без учета регистра
C++ Написать программу сравнения строк без учета регистра
C++ Функция, определяющая количество символов в строке без учета пробелов
C++ Сравнение двух строк string
C++ Сравнение строк без учета имеющегося в строке числа
Сравнение двух строк C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 7
17.11.2012, 16:29     Сравнение двух строк без учета пробелов #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstring>
 
void RemoveSpaces(char* p)
{
    for(char* p1 = p; *p = *p1; ++p1)
    {
        if(*p != ' ')
            ++p;
    }
}
 
int main()
{
    char s1[] = "a    bba", s2[] = " ab  ba ";
    RemoveSpaces(s1);
    RemoveSpaces(s2);
    std::cout << std::boolalpha << (!strcmp(s1, s2)) << std::endl;
    return 0;
}
Dantar
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 4
17.11.2012, 16:43  [ТС]     Сравнение двух строк без учета пробелов #3
Благодарю за такое изящное решение, но по нему есть пара вопросов
Цитата Сообщение от igorrr37 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
void RemoveSpaces(char* p)
{
    for(char* p1 = p; *p = *p1; ++p1)
    {
        if(*p != ' ')
            ++p;
    }
}
В частности вопрос по циклу в этой функции - что и как он делает ?
Заранее спасибо за объяснение!

Добавлено через 9 минут
Цитата Сообщение от igorrr37 Посмотреть сообщение
std::cout << std::boolalpha << (!strcmp(s1, s2)) << std::endl;
И еще один вопрос по этой строчке - зачем здесь выводить boolalpha и зачем там ! перед использованием функции strcmp?
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 7
17.11.2012, 16:45     Сравнение двух строк без учета пробелов #4
цикл копирует все непробельные символы (включая нуль-терминатор) вплотную один к другому с помощью двух указателей

Добавлено через 55 секунд
Цитата Сообщение от Dantar Посмотреть сообщение
И еще один вопрос по этой строчке - зачем здесь выводить boolalpha и зачем там ! перед использованием функции strcmp?
ну это для удобства: если строки равны - выдаёт true
Yandex
Объявления
17.11.2012, 16:45     Сравнение двух строк без учета пробелов
Ответ Создать тему
Опции темы

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