Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 16.01.2009, 18:16   #1
velvetdust
 
Регистрация: 16.01.2009
Сообщений: 8
По умолчанию Вопрос на указатели

Язык Си. Есть такое задание, по нему написал программу:

Составить программу для нахождения одинаковых букв в словах Х и У равной длины, стоящих на одних и тех же местах.

Код:
#include <stdio.h>
#include <conio.h>

main()
{
char word1[]="hello";
char word2[]="hailo";
char *i1,*i2;
int i,m=0;
printf("\n\n");
m=sizeof(word1);
if(sizeof(word2)>m)
	m=sizeof(word2);
i1=word1;
i2=word2;
for(i=0;i<m-1;i++)
{
	if(*(i1+i)==*(i2+i))
{
		printf("%d-letter is \"%c\"\n",i+1,*(i1+i));
	}
}
return 0;
}
В итоге программа выводит номер буквы в слове и собственно саму букву:
Код:
1 - letter is "h"
4 - letter is "l"
5 - letter is "o"

1 - letter is "h"
4 - letter is "l"
5 - letter is "o"
Вопрос такой - как изменить программу так, чтобы вводилось в строку не по одному слову, а по несколько, и сначала, попарно проверялась бы их длина, и, если бы она была одинаковой, выполнялась бы эта программа. Поясню:

char word1[]="magazin", "good", "week", "affect";
char word2[]="magasin", "god", "weak", "effect";

Проверяться должны 1,3 и 4 пары слов. Заранее, спасибо большое!

Последний раз редактировалось velvetdust; 16.01.2009 в 18:22.
velvetdust вне форума
Старый 16.01.2009, 18:25   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Во первых, массив слов определяется вот так
Код:
char *word1[]={"magazin", "good", "week", "affect"};
char *word2[]={"magasin", "god", "weak", "effect"};
Для определения длины есть функция strlen в заголовочном файле string.h
MaTBeu вне форума
Старый 16.01.2009, 19:47   #3
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
По умолчанию

А зачем:
Код:
if(sizeof(word2)>m)
	m=sizeof(word2);
если у вас в задании сказано, что слова одинаковой длинны.

Для выполнения вашего дополнения к заданию я бы начал перебирать массивы и сравнивать длинну слов соответственных элементов.
А ту конструкцию переделать на
Код:
if(sizeof(word1[i])=sizeof(word2[i])) //далее идет выполнение сравнивания
else printf("Dlinna ne sovpadaet");
Airou вне форума
Старый 16.01.2009, 20:37   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Airou Посмотреть сообщение
Код:
if(sizeof(word1[i])=sizeof(word2[i])) //далее идет выполнение сравнивания
else printf("Dlinna ne sovpadaet");
1) не sizeof, а strlen
2) не =, а ==
pu4koff вне форума
Старый 17.01.2009, 12:17   #5
breate
Пользователь
 
Аватар для breate
 
Регистрация: 30.12.2008
Сообщений: 78
По умолчанию РЕ

сайзофом пользоватся нельзя идёт сравнения ячеек памяти если байт равен байту и заним нет ничего типа инт и он попадёт в кучу то цикл окажется бесконечным и система тупо подвиснет вирус получается зярязный

что могу посоветывать почитай про функцию cin.getline(); strlen() в кратце одна функция вводит строку без пробелов а вторая считает её длинну а реализацию ты уже написал помоч не чем не могу - только посаветовать
Моя работа - Создание сайтов
breate вне форума
Старый 17.01.2009, 13:00   #6
velvetdust
 
Регистрация: 16.01.2009
Сообщений: 8
По умолчанию

В общем, спасибо всем, я разобрался, все работает =)

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>

main()
{
	char* word1[]={"magazin", "good", "week", "affect"};
	char* word2[]={"magasin", "god", "weak", "effect"};
	int len=sizeof(word1)/sizeof(char*);
	for(int j=0;j<len;j++) 
	{
		char *i1,*i2;
		printf("\n\n");

		if (strlen(word1[j])>strlen(word2[j]) || strlen(word1[j])<strlen(word2[j]))
			continue;

		int m=strlen(word1[j]);
		i1=word1[j];
		i2=word2[j];
		for(int i=0;i<m;i++)
		{
			if(*(i1+i)==*(i2+i))
			{
				printf("%d-letter is \"%c\"\n",i+1,*(i1+i));
			}
		}
			
	}

return 0;
}

Последний раз редактировалось velvetdust; 17.01.2009 в 13:03.
velvetdust вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели Mango Помощь студентам 2 09.12.2008 12:15
Указатели JOFRIF Общие вопросы C/C++ 2 31.08.2008 18:34
Указатели Принц Общие вопросы C/C++ 2 08.06.2008 16:15
Указатели в Си Иллидан Общие вопросы C/C++ 7 20.02.2008 11:14
Указатели Си JET_FLASH Общие вопросы C/C++ 2 31.01.2008 23:02