Ir ao conteúdo

C Colocar a primeira letra em Maiúsculo


Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Postado

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
Postado

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
  • Solução
Postado

@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

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...