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

Anagram

Ostatnio zmodyfikowano 2015-12-22 20:52
Autor Wiadomość
szawel
Temat założony przez niniejszego użytkownika
Anagram
» 2015-12-22 15:08:04
Napisalem taki kod
C/C++
#include <stdio.h>
#include <string.h>
#include <cstdlib>

int swap( int x, int y )
{
    char pom;
    pom = x;
    x = y;
    y = pom;
}
int dlugosc( char * arg )
{
    return strlen( arg );
}
int anagram( char str1[], char str2[] )
{
    int a = dlugosc( str1 );
    int b = dlugosc( str2 );
    if( a == b )
    for( int i = 0; i < a - 1; i++ )
    {
        for( int j = 0; j < b - 1; j++ )
        {
            if( a[ j ] > a[ j + 1 ] )
                 swap( a[ j ], a[ j + 1 ] );
           
           
            if( b[ j ] > b[ j + 1 ] )
                 swap( b[ j ], b[ j + 1 ] );
           
        }
    } else printf( "to nie anagram\n" );
   
}
int main()
{
    printf( "Wprowadz pierwszy lancuch znakow\n" );
    char str1[ 100 ];
    scanf( "%s", str1,( unsigned ) sizeof str1 );
    printf( "Wprowadz drugi lancuch znakow\n" );
    char str2[ 100 ];
    scanf( "%s", str1,( unsigned ) sizeof str1 );
   
    int d = anagram( str1, str2 );
    printf( "%u", d );
   
    system( "pause" );
}
W drugiej pętli przy if wywala błedy: invalid types 'int int ' for array subscript. Nie wiem co z tym zrobic i czy ide wogole w dobrym kierunku z tym programem. Bardzo prosze o pomoc.
P-142248
carlosmay
» 2015-12-22 15:13:43
C/C++
int a = dlugosc( str1 );
// ...
if( a[ j ] > a[ j + 1 ] )
 'a' nie jest tablicą.
P-142249
ArgonZapan
» 2015-12-22 15:13:47
C/C++
int anagram( char str1[], char str2[] )
{
    int a = dlugosc( str1 );
    int b = dlugosc( str2 );
    if( a == b ) {
        for( int i = 0; i < a - 1; i++ )
        {
            for( int j = 0; j < b - 1; j++ )
            {
                if( a[ j ] > a[ j + 1 ] )
                     swap( a[ j ], a[ j + 1 ] );
               
               
                if( b[ j ] > b[ j + 1 ] )
                     swap( b[ j ], b[ j + 1 ] );
               
            }
        }
    } else {
        printf( "to nie anagram\n" );
    }
   
}

zapomniałeś klamry po if
a co do błędu, zmienna 'a' nie jest tablicą char, tylko zmienną typu int[/code]
P-142250
szawel
Temat założony przez niniejszego użytkownika
» 2015-12-22 15:36:33
Rzeczywiscie przy warunkach nie powinno byc a i b tylko str1 i str2. Dziekuje za pomoc.
P-142253
szawel
Temat założony przez niniejszego użytkownika
» 2015-12-22 16:37:32
Poprawiłem kod. Wygląda tak :
C/C++
#include <stdio.h>
#include <string.h>
#include <cstdlib>
#define swap(type, i, j) {type t = i; i = j; j = t;}


int dlugosc( char * arg )
{
    return strlen( arg );
}
int anagram( char str1[], char str2[] )
{
    int a = dlugosc( str1 );
    int b = dlugosc( str2 );
   
   
    for( int i = 0; i < a - 1; i++ )
    {
        for( int j = 0; j < b - 1; j++ )
        {
            if( str1[ j ] > str1[ j + 1 ] )
                 swap( char, str1[ j ], str1[ j + 1 ] );
           
           
            if( str2[ j ] > str2[ j + 1 ] )
                 swap( char, str2[ j ], str2[ j + 1 ] );
           
        }
    }
    if( str1 == str2 ) {
        printf( "to anagram\n" );
    }
    else printf( "to nie anagram\n" );
   
}
int main()
{
   
    printf( "Wprowadz pierwszy lancuch znakow\n" );
    char str1[ 100 ];
    scanf( "%s", str1,( unsigned ) sizeof str1 );
    printf( "Wprowadz drugi lancuch znakow\n" );
    char str2[ 100 ];
    scanf( "%s", str2,( unsigned ) sizeof str2 );
   
    int d = anagram( str1, str2 );
   
   
    system( "pause" );
}
Kompiluje sie, ale nie działa. Ktoś wie, gdzie popełniłem błąd?
P-142255
ArgonZapan
» 2015-12-22 19:47:59
C/C++
if( str1 == str2 ) {
    printf( "to anagram\n" );
}
else printf( "to nie anagram\n" );

tak nie porównuje się łańcuchów znakowych, musisz użyć strcmp()

nie bardzo rozumiem, co chciałeś osiągnąć, w tych 2 pętlach for
P-142261
szawel
Temat założony przez niniejszego użytkownika
» 2015-12-22 20:00:59
Te pętle miały posortować te łańcuchy.
P-142262
ArgonZapan
» 2015-12-22 20:52:07
anagramy nie muszą mieć tyle samo liter więc, porównanie po sortowaniu, nic nie da.

przykład:
http://wordlist.eu/anagramy/fraza,cplusplus/grupuj,dlugosc
P-142263
« 1 »
  Strona 1 z 1