einstein Posted March 21, 2012 Report Share Posted March 21, 2012 Boas, Gostava de alguma ajuda relativamente a como separar strings. Então é assim, o utilizador pode escrever /pasta/ficheiro.extensao , ou entao só /ficheiro.extensao . o que eu nao consigo fazer é ler para várias strings o nome da pasta, o nome do ficheiro e a sua extensão. Só consigo fazer para um dos casos. Eu estava a pensar usar as funções fgets e sscanf mas não sei se assim vai resultar. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 21, 2012 Report Share Posted March 21, 2012 vê neste link como fazer isso : http://www.cplusplus.com/reference/clibrary/cstring/strtok/ tem um exemplo no fim IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
pmg Posted March 21, 2012 Report Share Posted March 21, 2012 Usa fgets() para obter o input. Depois uma mistura de funções declaradas no header <string.h> para "descobrir" onde começa o nome do ficheiro, a extensão, cada pasta, ... etc conforme as necessidades. Destaques: strchr() procura um caracter, numa string. strrchr() procura um caracter, numa string, do fim para o principio. Atenção que a função strtok() tem algumas particularidades que a tornam dificil de usar correctamente sem conhecer essas particularidades (principalmente a função altera a string com que é chamada). What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Dr_Lion Posted March 22, 2012 Report Share Posted March 22, 2012 Resumindo usas o strtok para te separar o caminho completo, em pedaços, pastas, ficheiros, para isso usas o caracter delimitador do strtok como o / Atenção ao que já disseram, quando usar o strtok tens que guardar as strings da forma como melhor te convier. Link to comment Share on other sites More sharing options...
einstein Posted March 22, 2012 Author Report Share Posted March 22, 2012 Obrigado, a todos pelas respostas só não percebi duas coisas. Se usar o strrchr() apenas consigo apanhar um caracter certo? Não consigo apanhar por exemplo uma coisa do género ".jpeg" ou entao so apenas uma string? Em relação ao strok(), se tiver por exemplo (pasta/ficheiro/index.html) consigo separar em 3 strings diferentes certo? Link to comment Share on other sites More sharing options...
pmg Posted March 22, 2012 Report Share Posted March 22, 2012 Se usar o strrchr() apenas consigo apanhar um caracter certo? Não consigo apanhar por exemplo uma coisa do género ".jpeg" ou entao so apenas uma string? O que o strrchr() te faz é devolver um ponteiro para um caracter. Esse ponteiro pode (e normalmente é) ser interpretado como uma string. Podes trata-lo directamente ou copiar a string para outro lado. char exemplo[] = "pasta/ficheiro/index.html"; char *ultimoponto; ultimoponto = strrchr(exemplo, '.'); if (ultimoponto != NULL) { printf("A extensao é %s\n", ultimoponto + 1); /* substitui o ponto por um terminador de string */ *ultimoponto = 0; printf("A string inicial mas sem extensao é %s\n", exemplo); } Em relação ao strok(), se tiver por exemplo (pasta/ficheiro/index.html) consigo separar em 3 strings diferentes certo? O strtok() altera a string de input metendo-lhe uns terminadores em sitios especificos, tal como fiz no exemplo acima com o strrchr(). O que o strtok() devolve sao ponteiros que podes usar directamente ou copiar para outro lado. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
einstein Posted March 22, 2012 Author Report Share Posted March 22, 2012 ah ok obrigado. Descobri agora que é possivel usar uma função strstr para encontrar uma string dentro de outra. Se eu fizer if(strstr(string1,".jpeg")!=0){ printf("Tipo encontrado"); if(strstr(string1,".jpeg")!=0){ printf("Tipo encontrado"); } } o meu programa nao funciona porque? Link to comment Share on other sites More sharing options...
bsccara Posted March 23, 2012 Report Share Posted March 23, 2012 A função 'strstr' é sensível à capitalização; se o texto apontado por 'string1' estiver em maiúsculas não irá encontrar ('jpeg' != 'JPEG'). Link to comment Share on other sites More sharing options...
einstein Posted March 23, 2012 Author Report Share Posted March 23, 2012 A função 'strstr' é sensível à capitalização; se o texto apontado por 'string1' estiver em maiúsculas não irá encontrar ('jpeg' != 'JPEG'). mas o texto vem em minusculas, se vier em maiusculas é mesmo para nao encontrar Link to comment Share on other sites More sharing options...
bsccara Posted March 23, 2012 Report Share Posted March 23, 2012 Verifica; mete um printf(string1) antes para teres a certeza que estás a receber o que pensas... Link to comment Share on other sites More sharing options...
einstein Posted March 23, 2012 Author Report Share Posted March 23, 2012 Verifica; mete um printf(string1) antes para teres a certeza que estás a receber o que pensas... ok. Mas o programa continua a não funcionar 😉 Link to comment Share on other sites More sharing options...
bsccara Posted March 23, 2012 Report Share Posted March 23, 2012 Então apareceu uma linha 'c:\......jpeg' e depois não apareceu 'Tipo encontrado' ? O bocado de código que meteste aqui tem duas chavetas de fecho para uma de abertura. Tens o código bem estruturado ? Link to comment Share on other sites More sharing options...
einstein Posted March 23, 2012 Author Report Share Posted March 23, 2012 Então apareceu uma linha 'c:\......jpeg' e depois não apareceu 'Tipo encontrado' ? O bocado de código que meteste aqui tem duas chavetas de fecho para uma de abertura. Tens o código bem estruturado ? O problema é que nem compila. Da estes erros : /usr/include/string.h:340: note: expected ‘const char *’ but argument is of type ‘int’ servidor.c:102: error: incompatible types when assigning to type ‘char[100]’ from type ‘char *’ Link to comment Share on other sites More sharing options...
bsccara Posted March 23, 2012 Report Share Posted March 23, 2012 A linha 102 do código é aquela do 'strstr' ? P.S. Fizeste a inclusão da string.h ? (#include <string.h>) Link to comment Share on other sites More sharing options...
veaoum Posted March 23, 2012 Report Share Posted March 23, 2012 Bem se aquilo que tu queres é apenas saber a extensao porque é que não ves a "pata" assim não estás dependente de funcões existentes mais complexas...... sem me preocupar muito com C o codigo seria algo do genero: int estancao( char *fich){´ int r=1; int i; i=strlen(fich)-1; while ( i>-1 && fich[i]!='.') i--; if i=-1 r=0; else strcat(ext,fich[i]); return(i); } Repara que o ext é uma variavel que terás de criar como geral e convinha que a apagasses sempre antes de chamares a função. Outra coisa que não tenho a certeza mas penso que tens de mandar &fich no strcat. Link to comment Share on other sites More sharing options...
pmg Posted March 23, 2012 Report Share Posted March 23, 2012 O problema é que nem compila. Da estes erros : /usr/include/string.h:340: note: expected ‘const char *’ but argument is of type ‘int’ servidor.c:102: error: incompatible types when assigning to type ‘char[100]’ from type ‘char *’ Como é que definiste a variavel "string1"? What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
einstein Posted March 23, 2012 Author Report Share Posted March 23, 2012 A linha 102 do código é aquela do 'strstr' ? P.S. Fizeste a inclusão da string.h ? (#include <string.h>) Sim a linha 102 é a do strstr e sim fiz a inclusão do string.h. Bem se aquilo que tu queres é apenas saber a extensao porque é que não ves a "pata" assim não estás dependente de funcões existentes mais complexas...... sem me preocupar muito com C o codigo seria algo do genero: int estancao( char *fich){´ int r=1; int i; i=strlen(fich)-1; while ( i>-1 && fich[i]!='.') i--; if i=-1 r=0; else strcat(ext,fich[i]); return(i); } Repara que o ext é uma variavel que terás de criar como geral e convinha que a apagasses sempre antes de chamares a função. Outra coisa que não tenho a certeza mas penso que tens de mandar &fich no strcat. Aqui segundo o que percebi estás a criar uma função? Não consigo fazer sem criar uma função? Para que fazes r=0, se i=-1? Logo no inico porque fazer char *fich? Como é que definiste a variavel "string1"? É algo q o utilizador coloca no ecrã Link to comment Share on other sites More sharing options...
pmg Posted March 23, 2012 Report Share Posted March 23, 2012 O problema é que nem compila. Da estes erros : /usr/include/string.h:340: note: expected ‘const char *’ but argument is of type ‘int’ servidor.c:102: error: incompatible types when assigning to type ‘char[100]’ from type ‘char *’ Não podes fazer array = strstr(texto, pesquisa); Em C os arrays não são atribuiveis como um todo. Tens de alterá-los elemento-a-elemento ... ou com strcpy() strcpy(array, strstr(texto, pesquisa)); // FALTA "ERROR CHECKING" What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
einstein Posted March 23, 2012 Author Report Share Posted March 23, 2012 Não podes fazer array = strstr(texto, pesquisa); Em C os arrays não são atribuiveis como um todo. Tens de alterá-los elemento-a-elemento ... ou com strcpy() strcpy(array, strstr(texto, pesquisa)); // FALTA "ERROR CHECKING" Com isto já é possivel armazenar a extenção? O que tu entendes por "ERROS CHECKING"? Link to comment Share on other sites More sharing options...
pmg Posted March 23, 2012 Report Share Posted March 23, 2012 Com isto já é possivel armazenar a extenção? Se fizeres tudo direitinho, sim. O exemplo que apresentei está um bocadito incompleto: tens de adicionar o que falta, direitinho! O que tu entendes por "ERROS CHECKING"? Se procurares a extensão e ela não existir o strstr() devolve NULL. Não podes passar NULL para o strcpy(). Tens de verificar os erros ("check the errors"). É isso que "ERROR CHECKING" quer dizer: "VERIFICAÇÃO DE ERROS". What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now