Przesuwanie znaku końca tekstu

0

Witam.
Piszę program w WinApi, który prosi o wpisanie do pola tekstowego imion (każde imię w osobnej linijce), po czym po kliknięciu przycisku określi płeć osoby posiadającej każde z tych imion.
Tekst z pola tekstowego pobrałem do "LPSTR Bufor", a tekst z Bufora do tablicy znaków "char tekst[1024]". Mój sposób na określenie płci jest taki, że wczytuję tekst aż do napotkania znaku ' \n ', a następnie sprawdzam znak przed. Jeżeli znak przed końcem linii jest równy 'a', to mamy do czynienia z kobietą, a jeżeli inny znak to z mężczyzną.
Mój problem polega na tym, że po ostatnim imieniu nie występuje znak ' \n ', gdyż tekst się wtedy kończy. I tu właśnie potrzebuję waszej pomocy. Jak wstawić znak ' \n ' po ostatnim imieniu, abym mógł dzięki niemu określić płeć ostatniej osoby?

Próbowałem coś robić, ale bezskutecznie 

Zamieszczam fragmenty mojego kodu z opisami co i jak:

//1. wczytanie do chara
                        
			dlugosc = GetWindowTextLength( hWklej_tu );
                        Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 );
                        GetWindowText( hWklej_tu, Bufor, dlugosc + 1 );
                        strcpy( skopiowany, Bufor );
                        skopiowany[dlugosc]='\n';
                        skopiowany[dlugosc+1]='\0';
                        //2. szukanie w tablicy liczby 13 [ENTERA] (/n)
                        for(int n=0; n<dlugosc; n++)
                        {
                            if( skopiowany[n] == '\n' )
                             ilosc_osob++;                                 
                        }
			
			hWklej_tu - uchwyt do pola edycji
			LPSTR Bufor
			DWORD dlugosc
			char skopiowany[1024] - tutaj znajduje się cały tekst z pola edycji 
				int nr_odcz_kom = 0;
				for(int n2=0; n2<50; n2++)
                                {     
                                        if( skopiowany[nr_odcz_kom] != '\n' )
                                        {
                                            osoba[nowe_id_osoby].nazwa[n2] = skopiowany[nr_odcz_kom];
                                            nr_odcz_kom++;
                                            if(n == ilosc_osob){ help = n2;}
                                        }
                                        else
                                        {
                                            nr_odcz_kom++;
                                            goto NEXT2;
                                        }
                                }

				tutaj pętla wczytuje znak po znaku (oraz zapisuje go do struktury)
				aż do napotkania znaku nowego wiersza. 
if(osoba[nowe_id_osoby].nazwa[n2]==char(13))
                                {
                                       if(osoba[nowe_id_osoby].nazwa[n2-1]=='a')
                                       {
                                              osoba[nowe_id_osoby].plec = 0; // kobieta
                                              }
                                       if(osoba[nowe_id_osoby].nazwa[n2-1]!='a')
                                       {
                                              osoba[nowe_id_osoby].plec = 1; // mezczyzna
                                              }   
                                } 

				tutaj następuje określenie płci 

Jeżeli nie chce wam się ogarniać tego, to powiedzie chociaż jak wygląda tablica z uwzględnieniem znaków szczególnych... To jest coś takiego?

Po wpisaniu takiego tekstu:

"wyraz1
wyraz2"

otrzymam po zapisaniu do tablicy to?:
{'w','y','r','a','z','1','\n','w','y','r','a','z','2','\0'}

Jak coś niejasne i potrzeba więcej wyjaśnień to pisać, bardzo mi zależy nad rozwiązaniem. :)

0

można na dwa sposoby:

  1. strcpy(tablica+dlugosc_tekstu,"\n"); // tutaj mozesz dopisac wiecej niz tylko \n jakbys chcial
  2. tablica[dlugosc_tekstu] = '\n'; tablica[dlugosc_tekstu+1] = 0;

dlugosc tekstu możesz policzyć używając strlen jeśli jej nie znasz. tablica to ten twój tekst

0

Dziękuję Ci bardzo :) Właśnie o to mi chodziło.

0

A tak poza tym...

Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 );
...zwalniasz tak przydzieloną pamięć funkcją GlobalFree?
W ogóle możesz pozbyć się dodatkowego buforu, zamiast:

                        Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 );
                        GetWindowText( hWklej_tu, Bufor, dlugosc + 1 );
                        strcpy( skopiowany, Bufor );

daj

                        GetWindowText(hWklej_tu, skopiowany, sizeof(skopiowany));
0

hmm... pamięć zawsze zwalniam :)
A co do tego sposobu to nie myślałem w ten sposób. Dużo prostszy. Dzięki :)

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