Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[ANSI C] Ciągi znaków - czytanie wyrazami od tyłu

Ostatnio zmodyfikowano 2017-01-17 20:23
Autor Wiadomość
selveee
Temat założony przez niniejszego użytkownika
[ANSI C] Ciągi znaków - czytanie wyrazami od tyłu
» 2017-01-17 17:20:39
Witam, potrzebuję pomocy na temat czytania wyrazami od tyłu wpisanego przeze mnie zdania.

Ogólnie chodzi o to, że gdy wczytuję powiedzmy:

C/C++
char str1[ 100 ];

gets( str1 ); //Tutaj zadaję zdanie do przerobienia: ala ma kota;

I ma mi wypluć wynik kota ma ala;

Planowałem zrobić (a w zasadzie robiłem) coś na styl wyczytania stringa od tyłu

C/C++
for( i = 0; i < strlen( str1 ); i++ )
{
    str2[ i ] = str1[ strlen( str1 ) - i - 1 ];
}

I potem sprawdzania go od tyłu (str2) do momentu napotkania spacji (' '), w tym momencie program przerabiałby kod czyli dla przykładu:

Ala ma kota pisane od tyłu to atok am alA, po przejechaniu się do momentu atok_ gdzie _ to spacja, zapisywałbym to do nowego stringa zdekrementowałbym o 1 w dół i zapisałbym to wszystko jak wzmieniłem do dla przykładu str3 już przerobione czyli wyszłoby mi kota i potem dopisałbym str3[i+1] = ' ' co dałoby mi kota_ gdzie _ to spacja.

Plan planem, ale niestety to mi nie trybi, ma ktoś jakieś pomysły?
P-156554
czaffik
» 2017-01-17 17:43:58
Mógłbyś spróbować wpisywać łańcuchy normalnie od początku do jakiejś zmiennej pomocniczej, np tablicy wskaźników na char, powiedzmy wczytujesz pierwszy wyraz ze zdania do pierwszej komórki tablicy, po napotkaniu spacji zwiększasz komórkę tablicy do której ma być wpisywany wyraz i wpisujesz drugi wyraz itd... Potem tylko wypisujesz komórki tablicy od końca, przydała by się też jakaś zmienna określająca ile masz wyrazów w zdaniu i najbezpieczniej byłoby taką tablicę pomocniczą ustawić na określony rozmiar, np 100, tj nie mógłbyś mieć więcej jak 100 wyrazów do przetworzenia w zdaniu.
P-156555
selveee
Temat założony przez niniejszego użytkownika
» 2017-01-17 17:52:00
Wskaźniki to moja na domiar złego słaba strona, dopiero zaczynam się ich uczyć dla własnego zrozumienia, jeżeli byłbyś tak uprzejmy i pokazałbyś mi to na przykładzie, nie wymagam od razu całego kodu programu ale tylko niewielki jego wycinek na temat który się wypowiedziałeś, to jest na temat zwiększania komórek :), byłbym niezmiernie wdzięczny.
P-156556
czaffik
» 2017-01-17 18:31:35
Zrobiłem idee w c++:
C/C++
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main( int arc, char * argv[] )
{
    string napis;
    vector < string > slowa;
   
    while( napis != "0" )
    {
        cin >> napis;
        slowa.push_back( napis );
    }
   
    for( int i = slowa.size() - 1; i >= 0; i-- )
         cout << slowa[ i ];
   
    return 0;
}
Moja słaba strona to c i jego funkcje xD, no ale sprubujemy i w tym zrobic.
P-156558
selveee
Temat założony przez niniejszego użytkownika
» 2017-01-17 18:34:08
A moja genialnie znikoma znajomość c++ mnei dobija, ale spróbuję i to rozkodować i zaimplementować to do C :)
P-156559
czaffik
» 2017-01-17 19:08:10
Spoko, już masz w C:
C/C++
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main( int arc, char * argv[] )
{
    char str[ 100 ];
    char pom[ 100 ][ 100 ];
    gets( str );
   
    int i = 0, j = 0;
    int poczatek = 0, koniec = 0;
    for( i = 0; i < strlen( str ); i++ )
    {
        if( str[ i ] == ' ' )
        {
            koniec = i;
            memcpy( pom[ j ], & str[ poczatek ], koniec - poczatek );
            poczatek += strlen( pom[ j ] );
            j += 1;
        }
    }
    memcpy( pom[ j ], & str[ poczatek ], strlen( str ) - poczatek );
   
    int k = 0;
    for( k = j; k >= 0; k-- ) printf( "%s ", pom[ k ] );
   
    printf( "\n" );
   
    return 0;
}
P-156561
selveee
Temat założony przez niniejszego użytkownika
» 2017-01-17 19:13:07
A mówiłem, nie chcę całego kodu ale taka już natura ludzka, że niektórzy służą pomocą w zbyt dużym stopniu :), dzięki bardzo, poprawię kilka niedociągnięć na własne potrzeby. Dzięki ponownie, ale niepotrzebnie pisałeś cały kod :) chodziło mi bardziej o zwizualizowanie twojej idei w C a nie pisanie wszystkiego ^^, czas to rozkodować i ogarnąć co i jak. Temat zostawię otwarty przez kilka dni, może ktoś będzie potrzebował coś dopisać.
P-156562
czaffik
» 2017-01-17 19:20:39
Nie przejmuj się ten kod doskonały nie jest, ale faktycznie zrobiłem tak bo sam nie byłem pewny jak to do końca zrobić więc musiałem przetestować no i skoro już napisałem całość to całość wkleiłem, miłej zabawy.
P-156563
« 1 » 2
  Strona 1 z 2 Następna strona