Zamiana małej litery na dużą w funkcji - toupper

0

Witam!

mam problem z toupperem w funkcji. Moja funkcja wczytuje tablicę charów (tablicę z literkami)

int zamien(char *tab)
{
	
		if(isalpha (*tab) && islower(*tab))
			{
				tolower(*tab);
				toupper(*tab);
				*tab+=1;
				*tab='s';
			}
	return 0;
}

w main ()

for(j=0; j<size; j++)
		{
			zamien(&napis[j]);
		}

i program wchodzi do mojej funkcji, a nawet nie chce zamienić literki, przechodzi przez tolower, przez toupper, a jak dojdzie do operacji arytmetycznych na znakach to podnosi literkę o jedno w alfabecie (z 'l' na 'm'), zamienia literkę na 's'.

O co chodzi? :D

3

heh...

*tab = tolower(*tab);

pozostałe, analogicznie

1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
	char *str = malloc(64);
	strcpy(str, "Hello world!");
	unsigned i = 0, len = strlen(str);
	for(i; i < len; ++i)
		str[i] = toupper(str[i]);
	printf("%s", str);
	return 0;
}
0
kaczus napisał(a):

heh...

*tab = tolower(*tab);

pozostałe, analogicznie

jaja... :D Nigdy bym nie zgadł, że argument pobierany zostaje zwrócony... xD

Dzięki! :)

A jeszcze mam takie pytanko odnośnie funkcji. W jaki sposób jako argument mogę podać tablicę ciągów znaków, a potem w funkcji działać na jej komórkach?

Ja zrobiłem pętlę i wczytuję znak po znaku, a jak zrobić, żeby w pętli znak po znaku wczytywać?

1

Ja zrobiłem pętlę i wczytuję znak po znaku, a jak zrobić, żeby w pętli znak po znaku wczytywać?

Zrobiłeś petle która wczytuje znak po znaku, i pytasz sie jak wczytywać w pętli znak po znaku, hmmmmmm?
Co do tablicy to musisz przekazać wskaźnik na wskaźnik int fun(char **tab) i potem odwołujesz sie normalnie tab[i][j]

zamiana znacznika `` na <quote> - @furious programming

0

sorry, chodziło mi, że napis jest argumentem w funkcji i w funkcji jest pętla znak po znaku. :P

int zamien(char **tab)
{
	int i=0;
	while (*tab[i]!=0){
		if(isalpha (*tab[i]) && islower(*tab[i]))
			{
				
				*tab[i]= toupper(*tab[i]);
				*tab[i]+=1;
				
			}
		i++;
		}
return 0;
}

takie coś nie przechodzi, tak jak Ty piszesz. ;p

0

Jedyne co robisz w powyższym kodzie to iterujesz po pierwszym elementcie tablicy **tab.
Musisz zrobić coś w tym stylu

  1. Utworzyć 2 pętle
for(int i=0;i<size;++i){
for(int j=0;j<strlen(*tab[i]);++j){
}
}
  1. W for ze zmienną j operujesz na łańcuchu znaków
  2. W for ze zmnienną i inkrementujesz
0

a jesteś w stanie mi wytłumaczyć, dlaczego size =strlen(tab) w funkcji mi daje wartość 258? ;/

`dodanie znaczników ``` - @furious programming

1 użytkowników online, w tym zalogowanych: 0, gości: 1