Zmiana liter

0

Chce napisać program który zmieni w pierwszym słowie litery p na b. W programie jako komentarz zadałem pytanie. Z góry dzięki za pomoc

 
#include <stdio.h>

char tablica[1000];

int main ( )
{
    printf("\n Wpisz dowolny ciąg znaków\n");
    gets( tablica ) ;

    printf("\nWprowadzono %s\n", tablica );

    int i=0;
    do
   {
    for(i=0; i!=; i++)// i!= jak oznaczyc w tym miejscu spacje, istnieje jakiś sposób?
        {
   if (tablica[i] == 'p')
      tablica[i] = 'b';
      }
      printf("\nWynik: %s\n", tablica);
   }
   while( tablica[i] != 0 );
   return 0;
}
0

Da się zadeklarować w define spacje w jakiś sposób? To coś da?

1

Twój kod podchodzi pod szczyt nieczytelności. To sie da czytac:

#include <stdio.h>

void zamien_p_na_b_w_pierwszym_slowie(char* s)
{
    for (; *s; s++)
    {
        switch (*s)
        {
            case ' ' : return;
            case 'p' :
            {
                *s = 'b';
                continue;
            }
        }
    }
}

int main ()
{
    printf("\n Wpisz dowolny ciąg znaków\n");
    char tablica[1000];
    fgets(tablica, 1000, stdin);
 
    printf("\nWprowadzono %s\n", tablica);

    zamien_p_na_b_w_pierwszym_slowie(tablica);
    printf("\nWynik: %s\n", tablica);

    return 0;
}
0

No fajnie, dzięki. Może mój program nie jest najlepszy ale nie od razu Kraków zbudowano. Chciałem wiedzieć czy da się go lekko poprawić żeby spełniał swoje zadanie a nie od razu tworzyć nowy. Więc ponawiam pytanie.

1

Da się. Te 10 linii kodu co zmieniłem to była lekka poprawka.

0

http://ideone.com/GTAWkk

 #include <cstdio>
#include <cstdlib>
#include <cstring>

#define MAX_INPUT 10000

int main(int, char**)
{
	char buffer[MAX_INPUT] = { 0 };
	gets(buffer);
	printf("Wprowadzono = %s\n", buffer);
	char * current = &buffer[0];
	while(*current != '\0' && *current != ' ')
	{
		if(*current == 'p')
			*current = 'b';
			
		current++;
	}
	printf("Rezultat = %s\n", buffer);
	
	return 0;
}
0

Teraz jest ok :)

0
void podmienLitereWPierwszymSlowie(const char *src, char *dest, char a, char b) {
      // kopiuj do napotkania słowa
      while(*src && !isalpha(*src)) {
          *dest++ = *src++;
      }

      // kopiuj i podmieniaj literę w pierwszym słowie
      while(*src && isalpha(*src)) {
           char ch = *src++;
           *dest++ = a==ch?b:ch;
      }

      // kopiuj resztę
      while(*src) {
          *dest++ = *src++;
      }
}
0

Da się napisać jakoś funkcje która deklarowała by spacje a potem ją zwracała?

0

Nie wystarczy zamienić pętli na while jak w rozwiązaniu krwawego kaczora?

 while(*current != '\0' && *current != '  ')
 

Nie da się tak samo oznaczyć spacji w for jak w while?

0

@Świetny Mleczarz
Da się, wystarczy że zwrócisz z tej funkcji chara o wartości 32, gdyż to jest kod ASCII spacji.
@Panix

for( ; *current !=' '; current++){}

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