einstein Posted March 21, 2012 at 03:22 PM Report #444909 Posted March 21, 2012 at 03:22 PM 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.
HappyHippyHippo Posted March 21, 2012 at 03:50 PM Report #444917 Posted March 21, 2012 at 03:50 PM 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
pmg Posted March 21, 2012 at 03:51 PM Report #444919 Posted March 21, 2012 at 03:51 PM 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!
Dr_Lion Posted March 22, 2012 at 01:21 PM Report #445141 Posted March 22, 2012 at 01:21 PM 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.
einstein Posted March 22, 2012 at 08:12 PM Author Report #445217 Posted March 22, 2012 at 08:12 PM 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?
pmg Posted March 22, 2012 at 10:21 PM Report #445237 Posted March 22, 2012 at 10:21 PM 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!
einstein Posted March 22, 2012 at 11:56 PM Author Report #445253 Posted March 22, 2012 at 11:56 PM 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?
bsccara Posted March 23, 2012 at 12:04 AM Report #445259 Posted March 23, 2012 at 12:04 AM A função 'strstr' é sensível à capitalização; se o texto apontado por 'string1' estiver em maiúsculas não irá encontrar ('jpeg' != 'JPEG').
einstein Posted March 23, 2012 at 12:05 AM Author Report #445260 Posted March 23, 2012 at 12:05 AM 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
bsccara Posted March 23, 2012 at 12:08 AM Report #445261 Posted March 23, 2012 at 12:08 AM Verifica; mete um printf(string1) antes para teres a certeza que estás a receber o que pensas...
einstein Posted March 23, 2012 at 12:11 AM Author Report #445262 Posted March 23, 2012 at 12:11 AM 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 😉
bsccara Posted March 23, 2012 at 12:15 AM Report #445263 Posted March 23, 2012 at 12:15 AM 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 ?
einstein Posted March 23, 2012 at 12:19 AM Author Report #445265 Posted March 23, 2012 at 12:19 AM 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 *’
bsccara Posted March 23, 2012 at 12:34 AM Report #445271 Posted March 23, 2012 at 12:34 AM A linha 102 do código é aquela do 'strstr' ? P.S. Fizeste a inclusão da string.h ? (#include <string.h>)
veaoum Posted March 23, 2012 at 06:33 AM Report #445286 Posted March 23, 2012 at 06:33 AM 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.
pmg Posted March 23, 2012 at 07:56 AM Report #445289 Posted March 23, 2012 at 07:56 AM 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!
einstein Posted March 23, 2012 at 10:06 AM Author Report #445294 Posted March 23, 2012 at 10:06 AM 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ã
pmg Posted March 23, 2012 at 10:34 AM Report #445297 Posted March 23, 2012 at 10:34 AM 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!
einstein Posted March 23, 2012 at 10:49 AM Author Report #445300 Posted March 23, 2012 at 10:49 AM 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"?
pmg Posted March 23, 2012 at 11:10 AM Report #445301 Posted March 23, 2012 at 11:10 AM 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!
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