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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Dantar
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 4
#1

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

17.11.2012, 15:29. Просмотров 1497. Ответов 3
Метки нет (Все метки)

Пишем в 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.

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

Сравнение строк string без учета регистра - C++
Есть уже реализованная стандартная функция для решения такой задачи? Делал это через перевод обоих строк в нижний регистр и оператор...

Сравнение строк без учета имеющегося в строке числа - C++
Есть строка содержащая слово и через пробел число, потом еще одно слово. Число может быть абсолютно любым, самое главное чтобы оно было....

Функция, определяющая количество символов в строке без учета пробелов - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;cstring&gt; using...

Сравнение строк (с игнорированием множественных пробелов) - C++
помогите написать програму, которая сравнивает строки (с игнорированием множественных пробелов) на С

Сравнение строк (с игнорированием множественных пробелов) - C++
Помогите плиз написать функцию и саму программу на С Задание: Функция WordCmp(s1,s2) Назначение: сравнение строк (с игнорированием...

Написать программу сравнения строк без учета регистра - C++
Доброго времени суток! помагите плз!)Написать программу, которая запрашивает у пользователя строки, а затем сравнивает эти строки, не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 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;
}
1
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?
0
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
17.11.2012, 16:45 #4
цикл копирует все непробельные символы (включая нуль-терминатор) вплотную один к другому с помощью двух указателей

Добавлено через 55 секунд
Цитата Сообщение от Dantar Посмотреть сообщение
И еще один вопрос по этой строчке - зачем здесь выводить boolalpha и зачем там ! перед использованием функции strcmp?
ну это для удобства: если строки равны - выдаёт true
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2012, 16:45
Привет! Вот еще темы с ответами:

Сравнение двух строк - C++
Написать функцию, выполняющую сравнение строк (с игнорированием множественных пробелов).

Сравнение двух строк - C++
Сравнение двух строк Как прервать цикл если введена пустая строка? Если : char str=&quot;\n&quot;; if (strcmp(pa.fullname ,str)) //то...

Сравнение двух строк - C++
Здравствуйте! возникла у меня небольшая проблема со сравнением двух строк разных типов. А точнее - wchar_t и char*. Понимаю, что просто...

Из двух заданных строк определить ту, которая содержит максимальную долю пробелов в ней - C++
Всем здравствуйте! прошу помощи в лаборатоной работе: Даны две строки. Определить номер строки (первая или вторая), которая содержит...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.11.2012, 16:45
Ответ Создать тему
Опции темы

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