Tablice ze znakami.

0

Witam, mam problem z dwoma zadaniami zwiazanymi z tablicami.

1**.Działanie programu:** Na prośbę programu użytkownik podaje napis (łańcuch najwyżej 99 znaków), który
program umieszcza w tablicy znaków o rozmiarze 100. Następnie program zamienia
wszystkie małe litery na duże i w następnej linii wyświetla ten zmieniony napis.
Wymagania: Zamiana małych liter na duże ma się odbywać w funkcji m_strupr(tab), otrzymującej
jako parametr adres pierwszej komórki tablicy (adres tablicy); ten sam adres ma być
zwracany.

Moje rozwiazanie:

#include <iostream>
#include <string.h>
using namespace std;
char m_strupr(char tab[100])
{
	char txt[100] = { tab[100] };
	_strupr_s(txt);
	return &txt[0];
}

int main()
{
	char napis[100], *n;
	n = gets_s(napis);
	int nowy_tekst = m_strupr(&napis[0]);
	cout<<nowy_tekst;
	return 0;
} 

Program się debuguje i bez wzgledu na to co wpisze wyswietla -52.

2..Działanie programu: Na prośbę programu użytkownik podaje napis (łańcuch najwyżej 99 znaków), który
program umieszcza w tablicy znaków o rozmiarze 100. Następnie program
przekopiowuje zawartość tej tablicy do drugiej tablicy o rozmiarze 100 i wyświetla
zawartość tej drugiej tablicy w nowej linii.
Wymagania: Przekopiowanie zawartości tablicy ma się odbywać w funkcji m_strcpy(z,do),
otrzymującej jako parametry adresy obu tablic; adres drugiej tablicy ma być
zwracany.

Moj kod:

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

int m_strcpy(char tab1[100], char tab2[100])
{
	m_strcpy(tab1, tab2);
	return tab2[0];
}

int main()
{
	char napis[100], *n;
	char napis2[100];
	n = gets_s(napis);
	m_strcpy(napis, napis2);
	for (int i = 0; i <= 100; i++)
		printf("%d", napis2[i]);
	return 0;
}

Tutaj mam ostrzezenie:warning C4717: 'm_strcpy': recursive on all control paths, function will cause runtime stack overflow.
Po wpisaniu czegos i wcisnieciu enter program przestaje dzialac.

0

Ad 1. Zadanie polegało na tym żeby zrobić własną wersje strupr() a nie w używać istniejącej.
Ad 2. Próbujesz stworzyć m_strcpy poprzez wywołanie m_strcpy() a kompilator musi odczytać twoje myśli i zastąpić to tym o czym pomyślałeś?

0

Wciąż nie wiem jak to zrobić. Spróbowałem pentlami for odpowiednio pierwsze zadanie:

 char m_strupr(char tab[100])
{
	for (int i = 0; i < 100; i++)
	{
		tab[i] = tab[i] - 32;
	}
	return tab[0];
}

i drugie:

 char m_strcpy(char tab1[100], char tab2[100])
{
	for (int i = 0; i < 100; i++)
		tab1[i] = tab2[i];
	return &tab2[0];
}

Ale wciąż nie działają.

0

Pierwsze zadanie zrealizowane źle ponieważ zakłada że napis zawsze będzie mieć 99 znaków plus znak końca oraz zakłada że wszystkie znaki będą małe.
Pierwsze zadanie zrealizowane źle ponieważ zakłada że oba napisy zawsze będzie mieć 99 znaków plus znak końca.

Może zacznij od przeczytania byle jakiego kursu, ponieważ brakuje ci podstaw z podstaw, np jak wyświetlić napis - jest wciąż dla ciebie wielką tajemnicą.

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