Błąd w kodzie c, wyrazy, ciag znakow

0

mój program ma wypisywać coś takiego: Ciąg wyjściowy: Ala ma kota i psa.
Ciąg wyjściowy: Ala ma kota, psa, tygrysa oraz hipopotama.

Wyrazy:

  1. Ala
  2. ma
  3. kota
  4. psa
  5. tygrysa
  6. oraz
  7. hipopotama

Wszystkich wyrazow: 7

a wypisuje tylko Ciag wyjściowy: ,psa, tygrysa oraz hipopotama.
w wyjściowym to samo.

 #include <iostream>
#include <stdio.h>
#include <string.h>

#include "wyrazy.h"

#define ROZMIAR_WE		20
#define ROZMIAR_WY		15
#define ROZMIAR_DODATEK	40
#define ROZMIAR_TEMP 40
using namespace std;

int main()
{
	char wejsciowy[ROZMIAR_WE] = "Ala ma kota i psa.";
	char wyjsciowy[ROZMIAR_WY];
	char tymczasowy[ROZMIAR_TEMP];
    char *index;

    unsigned int i, j;
    unsigned int poczatek;
    char biezacy;
	unsigned int liczba_wyrazow;

	// Przekopiuj ciag wejsciowy do ciagu wyjsciowego, pomijajac kropke
	strncpy(wyjsciowy, wejsciowy, ROZMIAR_WE);

	// Znajdz pozycje ciagu " i psa", potrzebna do obciecia zdania wejsciowego
	index = strstr(wyjsciowy, " i psa,");

	// Obetnij zdanie wejsciowe - usun ciag " i psa."
	if (index){
		index[0] = 0;

		// Dodaj zadany nowy ciag
		strncat (wyjsciowy, ", psa, tygrysa oraz hipopotama.", ROZMIAR_DODATEK);}


	// Wyswietl ciagi wejsciowy i wyjsciowy
	printf("Ciag wejsciowy: %s\n", wejsciowy);
	printf("Ciag wyjsciowy: %s\n", wejsciowy);
	printf("\nWyrazy:\n\n");

    // Wypisz i policz wszystkie wyrazy
    liczba_wyrazow = wypisz_wyrazy(wejsciowy);

	// Wydrukuj podsumowanie
	printf("\nWszystkich wyrazow: %d\n", liczba_wyrazow);

	return 0;
}




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

#define ROZMIAR_TEMP	5

unsigned int wypisz_wyrazy(char* zdanie)
{
	char tymczasowy[ROZMIAR_TEMP];

	unsigned int i,j;
	unsigned int poczatek;
	char biezacy;
	bool separator;

	//
	// Wyswietl poszczegolne wyrazy
	//
	j = 0;
	poczatek = 15;
	separator = false;

	for (i=0; i<strlen(zdanie); i++)
	{
		// Pobierz biezacy znak lancucha (na pozycji i)
		biezacy = *(zdanie+i);

		// Sprawdz, czy to jest separator
		if (biezacy == ' ')
			// Jesli poprzedni znak nie byl separatorem, wydrukuj wszystkie znaki pomiedzy
			// biezacym poczatkiem wyrazu a aktualna pozycja
			if (!separator)
			{
				strncpy(tymczasowy, zdanie+poczatek, i+poczatek);
				tymczasowy[i+poczatek] = 0;
				printf("%d. %s\n", j, tymczasowy);
			}

			// Zapamietaj, ze biezacy znak to separator
        if (separator = true);
		else
			// Jesli poprzedni znak byl separatorem, to mamy nowy wyraz
			if (separator) {
				poczatek = j-i;
			}

			// Zapamietaj, ze mielismy znak niebedacy separatorem
			separator = false;

	return i;
    }
}
0

Cały czas mieszasz wejściowy z wyjściowym, w kodzie też: :)

    // Wyswietl ciagi wejsciowy i wyjsciowy
    printf("Ciag wejsciowy: %s\n", wejsciowy);
    printf("Ciag wyjsciowy: %s\n", wejsciowy);
 
0

Nie widzę błędów w strcpy ani strcat, za to widzę jeden w strstr:

index = strstr(wyjsciowy, " i psa,"); 

Szukasz stringu z przecinkiem na końcu, a w zdaniu masz kropkę. String nie może być znaleziony.

 char wejsciowy[ROZMIAR_WE] = "Ala ma kota i psa."; 

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