Ir ao conteúdo
  • Cadastre-se

C Colocar a primeira letra em Maiúsculo


Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Ola, estou programando em C faz pouco tempo, com isso estou tentando fazer um código que ele mude somente a prime-a letra no nome para Maiúsculo, ele esta deixando tudo em maiúsculo, e também se alguém puder me explicar melhor o uso do espaço (!='  ' ) nesse código e do ++, pois ainda não entendi direito como usa-lo, abaixo segue o condigo que estou usando.

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	char nome[30];
	int i;
	
	printf("Digite o nome do Aluno ou Aluna\n");
	gets( nome);
	
	for(i=0; nome[i]!=' '; i++)
	nome[i] = toupper(nome[i]);
	
	printf("\n\n Segue o nome convertido: %s\n\n",nome);
	getch();
		
	return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

O comparador lógico (chamado assim pois é usado para comparar valores, ex se é igual a tal valor, ou se é maior que tal valor) != é usado para diferenciar dois valores ou seja se x = 0 e y = 1 podemos dizer que x != y pois os dois valores são diferentes, se fossem iguais descreveria x == y, enquanto o sinal de ++ é usado para incremento ou seja você está atribuindo mais 1 a variavel. Exemplo .

 

int x = 1;

x++;  // adiciona mais 1 a x

printf(x); // vai mostrar 2  

 

Agora vamos ao seu código para explicarmos melhor ... 

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	char nome[30];
	int i;
	
	printf("Digite o nome do Aluno ou Aluna\n");
	gets( nome);
// vai fazer a repetição nos caracteres do nome enquanto o caracter no indice da repetição for diferente de vazio (nome[i] != ' ')	
	for(i=0; nome[i]!=' '; i++){   
// vai colocar todas os caracteres em letra maiuscula pois vai fazer a varredura de todos até que o caracter no ciclo seja ' ' 
		nome[i] = toupper(nome[i]);  
	}
  
	printf("\n\n Segue o nome convertido: %s\n\n",nome);
	getch();
		
	return 0;
}

Agora se quisesse apenas colocar a primeira letra, basta apenas tirar o ciclo for no qual vai varrer toda palavra nome colocando apenas o caracter com o seu respectivo peso (como é o primeiro caracter o indice é 1) ....

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	char nome[30];
	int i;
	
	printf("Digite o nome do Aluno ou Aluna\n");
	gets( nome);
	
	nome[1] = toupper(nome[1]); // deixando apenas a primeira letra
	
	printf("\n\n Segue o nome convertido: %s\n\n",nome);
	getch();
		
	return 0;
}

 

adicionado 2 minutos depois

Se ele for na segunda letra como maiúscula ao invés da primeira é porque nos vetores de c começa com o peso '0'.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

  • Solução

@emanoel souza costa É claro que está deixando toda a string em letras maiúsculas, tem um laço de repetição pra fazer isso.

Uma dica: não use gets().

image.png.405cd705214d04ffcc9bf4dffbf0f052.png

Se você inserir uma string cujo tamanho seja maior do que o tamanho declarado, poderá ocasionar um buffer overflow. Use a função scanf() e, por segurança, limite a quantidade de caracteres com os quais o usuário poderá entrar.

O identificador nesse caso seria %s, e para limitar, apenas insira o tamanho da string - 1 após o %. Como você declarou que o tamanho da string nome é 30, o correto seria usar %29s para deixar espaço para o caractere NULL, que encerra a string.

Você incluiu muitas bibliotecas e com certeza você não precisa de tudo isso. Imagino que você não saiba o que cada uma contém.

 

O que você pode fazer é o seguinte, veja esse pedaço da tabela ASCII:

image.thumb.png.591111636ec364124de39585e8c58bf0.png

Percebe que a diferença entre letras maiúsculas e minúsculas é sempre 32?

Você pode simplesmente usar uma estrutura condicional para avaliar se o primeiro caractere se trata de uma letra minúscula e, caso seja, poderia ser efetuada a subtração:

if(nome[0]>='a' && nome[0]<='z'){
	// Verificando letra minúscula
	nome[0]=nome[0]-32;
}

Por fim, se você substituir getch() por getchar(), você vai precisar incluir somente a biblioteca stdio.h.

 

44 minutos atrás, emanoel souza costa disse:

alguém puder me explicar melhor o uso do espaço (!='  ' ) nesse código e do ++, pois ainda não entendi direito como usa-lo

Pesquise sobre operadores em C.

!= corresponde a "diferente de".

++ se trata de um Incremento pós-fixado.

'  ' é o caractere espaço.

 

21 minutos atrás, Vitor_TEC disse:

nome[1] = toupper(nome[1]); // deixando apenas a primeira letra

A string se inicia em 0, a primeira letra estaria em nome[0], e mesmo assim, eu não usaria uma função para algo tão simples.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...