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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 20:06   #1
Китти
Пользователь
 
Регистрация: 22.12.2009
Сообщений: 19
По умолчанию Сравнение строк в С++

Нужно сравнить 2 строки не учитывая регистр без использования функций strcmp и stricmp...
Задачка решается двумя способами методом массивов и с помощью адресной арифметики.

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
#include <cctype>
#define N 80
int compul_mas(char c1[N], char c2[N])
{
printf ("massiv") ;
int i,j,n=0;
if (c1[0]=='\0' || c2[0]=='\0')
return 0;
for (i=0; i<=N; i++)
{
for (j=0;j<=strlen(c2); j++)
if (c1[i]==c2[j])
???????????????????????????????????????????
// не могу разобраться с условиями
return 1; }

int compul_ptr( char *c1, char *c2)
{
printf ("adresnaya arifmetika");
int i,j,n=0;
if (*c1=='\0' || *c2=='\0')
return 0;
for (i=0; i<=N; i++)
{
for (j=0;j<=strlen(c2); j++)
if (*(c1+i)==*(c2+j))
???????????????????????????????????????????
// не могу разобраться с условиями
return 1; }

int main()
{
char s1[N], s2[N];
printf ("Vvedite s1:\n");
gets(s1);
printf ("Vvedite s2:\n");
gets(s2);
if (strspn_mas(s1, s2)&&strspn_ptr(s1, s2)) ;
else printf ("error");
getch();
return 0;
}

Последний раз редактировалось Stilet; 12.10.2010 в 16:11.
Китти вне форума Ответить с цитированием
Старый 12.10.2010, 15:28   #2
randomizr
 
Аватар для randomizr
 
Регистрация: 29.09.2010
Сообщений: 4
По умолчанию Сравнение строк в С

написал процедуру для сравнение строк, но мне надо учесть сравнение только русского алфавита, т е англ символы должны пропускаться, кто подскажет как сделать. Код ниже:

Код:masm.model small.stack 256.dataNAME1 db абFвгNAME2 db абGвг.codemain:mov ax,DATAmov ds,axmov es,axxor ax,axcall G10CMPSG10CMPS PROC NEARCLD MOV CX,5 LEA SI,NAME1 LEA DI,NAME2 REPE CMPSB ; Сравнить NAME1 и NAME2 JE G20 ;равныMOV BH,02jmp short g30G20: mov bh,01G30: RET G10CMPS endpexit:mov ax,4c00hint 21hend main
А зомби здесь тихие…
randomizr вне форума Ответить с цитированием
Старый 12.10.2010, 16:56   #3
HellchilD
 
Регистрация: 01.11.2009
Сообщений: 8
По умолчанию

прежде всего необходимо привести строки к одному регистру. для отбрасывания ненужных символов достаточно создать массив учитываемых при сравнении символов и при записи строки в массив для сравнения отбрасывать ненужные путем их сравнения с данным массивом. после этого 2 строки сравниваются посимвольно в цикле

Код:
int mas_compare(char *str1, char *str2) {
 int mas1[100],mas2[100],i,j,swc,mas1_size=0,mas2_size=0;
 int symbols_to_cmp[N]={А, Б, В .... Я}; //массив учитываемых символов, N определишь сам
 //привести строки к одному регистру
 for (i=0;i<100;i++) {mas1[i]='\0';mas2[i]='\0';} //обнуление массивов
 for (i=0;i<strlen(str1);i++) {
  swc=0;
  for (j=0;j<N;j++) {
   if (str1[i]==symbols_to_cmp[j]) {swc=1;break;}
  }
  if (swc) {mas1[i]=str1[i];mas1_size++;}
 }
 for (i=0;i<strlen(str2);i++) {
  swc=0;
  for (j=0;j<N;j++) {
   if (str2[i]==symbols_to_cmp[j]) {swc=1;break;}
  }
  if (swc) {mas2[i]=str2[i];mas2_size++}
 }
 if (mas1_size!=mas2_size) return 1;
 else {
  swc=0;
  for(i=0;i<mas1_size;i++) {
   if (mas1[i]!=mas2[i]) {swc=1;break}
  }
 }
 return swc; // 0 - строки равны, 1 - не равны
}
писал не в среде разработки, могут быть синтаксические ошибки
HellchilD вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение строк Dasharnb777 Общие вопросы .NET 5 22.09.2010 20:46
Макрос на сравнение и подсчет в первом столбце строк, и сумирование значений этих строк в другом столбце Shpr0T Microsoft Office Excel 8 30.08.2010 17:52
сравнение строк -? Evgenii Общие вопросы Delphi 10 15.07.2009 15:28
С++. Сравнение строк maxlav Помощь студентам 8 25.06.2009 04:33
Сравнение строк Elm0 Паскаль, Turbo Pascal, PascalABC.NET 2 02.06.2008 09:31