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

2015-03-12 20:34
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

Pozostało 580 znaków

2015-03-12 20:41

heh...

*tab = tolower(*tab);

pozostałe, analogicznie


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie

Pozostało 580 znaków

2015-03-12 20:43
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;
}

Pozostało 580 znaków

2015-03-12 21:04
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ć?

Pozostało 580 znaków

2015-03-12 21:10
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

edytowany 3x, ostatnio: furious programming, 2015-03-12 22:51
Do cytowania używaj znaczników &lt;quote&gt; - furious programming 2015-03-12 22:51

Pozostało 580 znaków

2015-03-12 22:55
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

edytowany 1x, ostatnio: Neeus, 2015-03-12 22:56
nie bardzo rozumiem po co jest char **tab - kaczus 2015-03-13 08:56

Pozostało 580 znaków

2015-03-12 23:05
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){
    }
    }
  2. W for ze zmienną j operujesz na łańcuchu znaków
  3. W for ze zmnienną i inkrementujesz
edytowany 1x, ostatnio: Proxima, 2015-03-12 23:06

Pozostało 580 znaków

2015-03-12 23:27
0

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

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

edytowany 1x, ostatnio: furious programming, 2015-03-13 01:48
bo widocznie tyle sobie zaalokowałeś miejsca. - Proxima 2015-03-12 23:30
no właśnie nie... :p mam NAP 30, ale spoko. Poradziłem sobie inaczej, nulla wstawiłem w miejsce końca mojego wyrazu i tyle. While, aż różne od NULLA :P - Neeus 2015-03-12 23:47
@Neeus - używaj backticków do oznaczania fragmentów kodu w tekście; - furious programming 2015-03-13 01:49

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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