Localhost Posted October 4, 2009 at 09:26 PM Report Share #289957 Posted October 4, 2009 at 09:26 PM Olá pessoal, estava mais uma vez no meu estudo de C quando me deparo com o seguinte problema: -Peça ao usuário para digitar uma string, guarde essa string numa variável, depois apresente a string ao contrário, ou seja por exemplo: ola fica alo, percebem? Também pedia para passar o conteúdo da primeira variável para outra e apresentar a string ao contrario com essa variável. A ultima parte metesse um strcpy(variável_origem,variável_destino) e já está não é? Só não sei a parte de virar a string ao contrário :bored: Alguém podia ajudar? Por Favor 😁 here since 2009 Link to comment Share on other sites More sharing options...
bruno1234 Posted October 4, 2009 at 11:37 PM Report Share #289975 Posted October 4, 2009 at 11:37 PM Uma string em C é um array de char terminado com null. A solução é: -Criar um array de chars da mesma dimensão q o input do utilizador. -Saber a posição inicial do array de origem, q é o char* e a posição final, q é '\0' - 1. -Depois é percorrer desde a posição final até á inicial copiando caracter a caracter, tirando partido da aritmética de ponteiros. Se houver algum termo q n conheces, pesquisa pelo google. char*, '\0', array e aritmética de ponteiros são noções importantes para quem trabalha com C. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
Localhost Posted October 5, 2009 at 12:41 PM Author Report Share #290030 Posted October 5, 2009 at 12:41 PM Obrigado pela resposta, conheço todos os conceitos excepto aritmética de ponteiros (estou a iniciar agora o estudo a ponteiros), mas não existe outra maneira mais simples de se fazer? É que ainda não cheguei a um nível de conhecimento tão alto 😄 here since 2009 Link to comment Share on other sites More sharing options...
Localhost Posted October 5, 2009 at 12:48 PM Author Report Share #290031 Posted October 5, 2009 at 12:48 PM Eu fiz isto: #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int x; char str[100],str1[100]; //Declaração das strings printf("Digite uma string: "); scanf("%s" ,&str); for(x=0;x<100;x++) //Inicio da contagem de caracteres da string str { if (str[x] == '\0') //Se o contador encontrar o caracter '\0' { for(x='\0';x>0;x--) //O contador começa do final para o inicio { strcpy(str1,str); //Copia para str1 printf("%s\n" ,str1[x]); //Apresenta str1 break; } } } system("pause"); } here since 2009 Link to comment Share on other sites More sharing options...
bruno1234 Posted October 5, 2009 at 01:10 PM Report Share #290039 Posted October 5, 2009 at 01:10 PM A ideia era essa. A única diferença é q n precisavas de fixar pelo menos o 2º array com as 100 posições. Mas assim tb pode ser. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
Localhost Posted October 5, 2009 at 01:43 PM Author Report Share #290049 Posted October 5, 2009 at 01:43 PM Sim, mas não deu, eu digitava uma string e não aparecia :s here since 2009 Link to comment Share on other sites More sharing options...
Localhost Posted October 5, 2009 at 03:22 PM Author Report Share #290066 Posted October 5, 2009 at 03:22 PM Podias-me ajudar? here since 2009 Link to comment Share on other sites More sharing options...
bruno1234 Posted October 5, 2009 at 03:27 PM Report Share #290068 Posted October 5, 2009 at 03:27 PM Não devias usar o strcpy, mas sim copiar posição a posição do array. str1[inicial] = str[final] e depois incrementar a inicial e decrementar a final. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
Localhost Posted October 5, 2009 at 04:38 PM Author Report Share #290085 Posted October 5, 2009 at 04:38 PM Bruno1234, obrigado pela ajuda, já consegui alguma coisa com isto: #include<stdio.h>#include<stdlib.h> #include<string.h> int main() { int x,y,z; char str[100],str1[100]; //Declaração das strings printf("Digite uma string: "); scanf("%s" ,&str); for(x=0;x<100;x++) //Inicio da contagem de caracteres da string str { if (x == '\0') //Se o contador encontrar o caracter '\0' { for(z=5;z>0;z--) { for(y=0;y<5;y++) { str1[0] = str[z]; //Copia para str1 printf("%s\n" ,str1); //Apresenta str1 break; } } } } system("pause"); } Agora o problema é como vou saber qual o numero de letras que devo usar, acho que vou ter de contar quando o usuário digitar, guardar numa variável int e utilizá-la mais tarde 😄 here since 2009 Link to comment Share on other sites More sharing options...
bruno1234 Posted October 5, 2009 at 04:44 PM Report Share #290089 Posted October 5, 2009 at 04:44 PM Para saberes a dimensão da string q o utilizador inseriu é procurares no array de input por '\0'. Faz um while até encontrares o '\0' nesse array, incrementando um inteiro q depois te dá a dimensão. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
Localhost Posted October 5, 2009 at 04:54 PM Author Report Share #290091 Posted October 5, 2009 at 04:54 PM Sim essa parte eu sei, obrigado, mais logo venho aqui dar os resultados 😄 here since 2009 Link to comment Share on other sites More sharing options...
Localhost Posted October 5, 2009 at 05:01 PM Author Report Share #290093 Posted October 5, 2009 at 05:01 PM Problema Resolvido, graças a ti [glow=red,2,300]bruno1234[/glow], obrigado! Solução: #include<stdio.h>#include<stdlib.h> #include<string.h> int main() { int x,y,z,cont; char str[100],str1[100]; //Declaração das strings printf("Digite uma string: "); scanf("%s" ,&str); cont=0; while(!str[cont]=='\0') { cont++; } for(x=0;x<100;x++) //Inicio da contagem de caracteres da string str { if (x == '\0') //Se o contador encontrar o caracter '\0' { for(z=cont;z>0;z--) { for(y=0;y<cont;y++) { str1[0] = str[z]; //Copia para str1 printf("%s\n" ,str1); //Apresenta str1 break; } } } } system("pause"); } here since 2009 Link to comment Share on other sites More sharing options...
bruno1234 Posted October 5, 2009 at 05:42 PM Report Share #290099 Posted October 5, 2009 at 05:42 PM Eu não percebo mto de C, mas já agora deixo-te aqui uma solução tb: char str[100]; char novoStr[100]; int cont = 0; int i = 0; printf("Digite uma string: "); scanf("%s" ,&str); while(str[cont]) ++cont; for(i = 0; i <= cont; ++i) { novoStr[i] = str[cont - i - 1]; if (i == cont) novoStr[i] = '\0'; } printf("%d %s -> %s\n", cont, &str, &novoStr); O pessoal q domina C provavelmente fazia isto em meia linha de código. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
Baderous Posted October 5, 2009 at 06:31 PM Report Share #290121 Posted October 5, 2009 at 06:31 PM Para inverter uma string basta percorrê-la até meio e ir trocando os caracteres 2 a 2 das posições simétricas. #include <stdio.h> #include <string.h> int main(void) { char str[1024], aux; int i, len; fgets(str,sizeof(str),stdin); len = strlen(str); for (i=0;i<len/2;i++) { aux=str[i]; str[i]=str[len-i-1]; str[len-i-1]=aux; } printf("%s\n",str); return 0; } Link to comment Share on other sites More sharing options...
bruno1234 Posted October 5, 2009 at 06:36 PM Report Share #290123 Posted October 5, 2009 at 06:36 PM Já nem me lembrava da existência do strlen, isso poupa o while q fiz para saber a dimensão da string. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
Localhost Posted October 5, 2009 at 09:53 PM Author Report Share #290176 Posted October 5, 2009 at 09:53 PM Baderous, isso já é um bocado avançado mas obrigado, eu um dia hei-de chegar a esse nível, afinal ainda tenho 15 anos, ainda tenho muito tempo para aprender 🙂 Alguem me podia explicar esta linha de código: novoStr = str[cont - i - 1]; here since 2009 Link to comment Share on other sites More sharing options...
pedrosorio Posted October 5, 2009 at 11:18 PM Report Share #290187 Posted October 5, 2009 at 11:18 PM Baderous, isso já é um bocado avançado mas obrigado, eu um dia hei-de chegar a esse nível, afinal ainda tenho 15 anos, ainda tenho muito tempo para aprender 🙂 Nunca é cedo para aprender (e tentar perceber). Aquilo que precisas para perceber o que o Baderous fez não é experiência, é lógica, acredita que se tentares só ganhas com isso. Alguem me podia explicar esta linha de código: novoStr = str[cont - i - 1]; Está dentro de um ciclo for, que incrementa a variável i em cada passo. Basicamente o que faz é ir colocando na posição i da nova string, o caracter que está na posição cont - i - 1 (na i-ésima posição a contar do fim) da string que recebeste. Por exemplo, se tens uma string com 10 caracteres, começa por fazer, com i=0, novoStr[0] = str[9]; (9 é a posição do último caracter numa string com 10 caracteres). Não respondo a dúvidas por mensagem. Link to comment Share on other sites More sharing options...
Localhost Posted October 6, 2009 at 10:58 AM Author Report Share #290221 Posted October 6, 2009 at 10:58 AM Baderous, isso já é um bocado avançado mas obrigado, eu um dia hei-de chegar a esse nível, afinal ainda tenho 15 anos, ainda tenho muito tempo para aprender Nunca é cedo para aprender (e tentar perceber). Aquilo que precisas para perceber o que o Baderous fez não é experiência, é lógica, acredita que se tentares só ganhas com isso. Calma, não percebeste o meu ponto de vista. O que eu queria dizer é que ainda sou iniciado em C portanto é obvio que ainda não tenho os conhecimento daqueles conceitos todos, era só isso que estava a tentar dizer. Quanto à linha de código a única coisa que não percebo é aquela subtracção: cont - i - 1 e continuo sem perceber o que faz ? Podias explicar exclusivamente essa parte? 👍 here since 2009 Link to comment Share on other sites More sharing options...
pedrosorio Posted October 6, 2009 at 05:56 PM Report Share #290295 Posted October 6, 2009 at 05:56 PM Calma, não percebeste o meu ponto de vista. O que eu queria dizer é que ainda sou iniciado em C portanto é obvio que ainda não tenho os conhecimento daqueles conceitos todos, era só isso que estava a tentar dizer. Eu percebi muito bem o que estavas a dizer, e tentei explicar-te que a solução do bruno1234 que tu pensas que é simples, usa tantos conceitos de C como a do Baderous. Quanto à linha de código a única coisa que não percebo é aquela subtracção: cont - i - 1 e continuo sem perceber o que faz ? Podias explicar exclusivamente essa parte? 👍 cont é o comprimento da tua string. Para obter a posição do último elemento da string tens que fazer cont - 1 (porque uma string com 'n' caracteres ocupa as posições 0 até n-1). Para ir "recuando" na string tens que subtrair i. Como tens um ciclo com i desde 0 até cont, vais andando deste a última posição até à primeira. Explicar melhor só se fizer uma tabelinha. Não respondo a dúvidas por mensagem. Link to comment Share on other sites More sharing options...
Localhost Posted October 6, 2009 at 06:23 PM Author Report Share #290299 Posted October 6, 2009 at 06:23 PM Ok, já percebi, desculpa lá o incomodo, estás em eng. informática? Gostava de ter algumas infos. sobre o curso... here since 2009 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