#include #include #define Nmax 30 #define NmaxCol 10 void CopiaStr(char prim[], char seg[]){ /* Copia String prim[] para String seg[] */ int i; i=0; while(prim[i]!='\0'){ /* \0 indica fim de String */ seg[i]=prim[i]; i++; } seg[i]='\0'; } /* fim CopiaStr */ int ComparaStr(char prim[], char seg[]){ /* Devolve 0 se as duas Strings sao iguais */ /* 1 se prim[] < seg[], e -1 se prim[] > seg[] */ /* de acordo com a ordem alfabetica */ int i; i=0; while(prim[i]!='\0' && seg[i]!='\0'){ /* \0 indica fim de String */ if(prim[i]seg[i]) return (-1); else i++; } if(prim[i]=='\0' && seg[i]=='\0')return(0); else if(prim[i]=='\0' && seg[i]!='\0')return(1); /* caso como prim[] ser Lu e seg[] ser Lua */ else return(-1); /* caso como prim[] ser Lua e seg[] ser Lu */ } /* fim ComparaStr */ int ComparaStrMatr(char prim[Nmax][NmaxCol], int iprim , char seg[Nmax][NmaxCol], int iseg){ /**** Note que o NmaxCol deve ser especificado ****/ /* compara 2 Strings nas linhas iprim e iseg de uma matriz tipo char */ /* Devolve 0 se as duas Strings sao iguais */ /* 1 se prim[] < seg[], e -1 se prim[] > seg[] */ /* de acordo com a ordem alfabetica */ int icol; icol=0; while(prim[iprim][icol]!='\0' && seg[iseg][icol]!='\0'){ /* \0 indica fim de String */ if(prim[iprim][icol]seg[iseg][icol]) return (-1); else icol++; } if(prim[iprim][icol]=='\0' && seg[iseg][icol]=='\0')return(0); else if(prim[iprim][icol]=='\0' && seg[iseg][icol]!='\0')return(1); /* caso como prim[] ser Lu e seg[] ser Lua */ else return(-1); /* caso como prim[] ser Lua e seg[] ser Lu */ } /* fim ComparaStr */ void CopiaStrMatr(char prim[Nmax][NmaxCol], int iprim , char seg[Nmax][NmaxCol], int iseg){ /* Copia String prim[][] na linha iprim para linha iseg da matriz seg[][] */ int icol; icol=0; while(prim[iprim][icol]!='\0'){ /* \0 indica fim de String */ seg[iseg][icol]=prim[iprim][icol]; icol++; } seg[iseg][icol]='\0'; } /* fim CopiaStr */ main(){ /* Exemplos com Strings */ char Nome1[Nmax], Nome2[Nmax]; char NomeMatr1[Nmax][NmaxCol], NomeMatr2[Nmax][NmaxCol]; Nome1[0]='L';Nome1[1]='u';Nome1[2]='\0'; /* \0 indica fim de String */ printf("1 Nome1 = %s \n", Nome1 ); /* Imprimir Lu */ printf("Digite um nome: "); scanf("%s", Nome2); /* Ler um nome digitado como Galileu, */ /* seguido p/ tecla ENTER */ printf("2 Nome2 = %s \n", Nome2 ); /* Imprimir Galileu */ printf("3 Resposta da ComparaStr e': %d \n", ComparaStr(Nome1, Nome2) ); Nome1[0]='T'; Nome1[1]='e'; Nome1[2]='r'; Nome1[3]='r'; Nome1[4]= 'a'; Nome1[5]= '\0'; printf("4 Nome1 = %s \n", Nome1 ); printf("5 Nome2 = %s \n", Nome2 ); printf("6 Resposta da ComparaStr e': %d \n", ComparaStr(Nome1, Nome2) ); CopiaStr(Nome1, Nome2); printf("7 Nome1 = %s \n", Nome1 ); printf("8 Nome2 = %s \n", Nome2 ); printf("9 Resposta da ComparaStr e': %d \n", ComparaStr(Nome1, Nome2) ); printf("\n ***** Abaixo temos matrizes **** \n"); /******************** Abaixo temos matrizes *******************/ NomeMatr1[2][0]='M';NomeMatr1[2][1]='e';NomeMatr1[2][2]='\0'; printf("1 NomeMatr1 = %s \n", &NomeMatr1[2][0] ); /* conteudo na linha 2 */ printf("Digite um nome: "); /* Note que ind 0 de coluna e' especificado */ scanf("%s", &NomeMatr2[7][0]); /* Ler um nome digitado como Galileu, */ /* seguido p/ tecla ENTER, na linha 7 */ printf("2 NomeMatr2 = %s \n", &NomeMatr2[7][0]); printf("3 Resposta da ComparaStrMatr e': %d \n", ComparaStrMatr(NomeMatr1, 2, NomeMatr2, 7) ); /* Note que os [][] NAO devem ser especificados */ NomeMatr1[2][0]='M'; NomeMatr1[2][1]='a'; NomeMatr1[2][2]='r'; NomeMatr1[2][3]='t'; NomeMatr1[2][4]= 'e'; NomeMatr1[2][5]= '\0'; printf("4 NomeMatr1 = %s \n", &NomeMatr1[2][0] ); printf("5 NomeMatr2 = %s \n", &NomeMatr2[7][0] ); printf("6 Resposta da ComparaStrMatr e': %d \n", ComparaStrMatr(NomeMatr1,2, NomeMatr2,7) ); CopiaStrMatr(NomeMatr1,2, NomeMatr2,7); printf("7 Nome1 = %s \n", &NomeMatr1[2][0] ); printf("8 Nome2 = %s \n", &NomeMatr2[7][0] ); printf("9 Resposta da ComparaStrMatr e': %d \n", ComparaStrMatr(NomeMatr1,2, NomeMatr2,7) ); } /* fim main */