Печатная строка отличается от строки, которую я ввел для программирования c - PullRequest
0 голосов
/ 28 марта 2020
#include<string.h>
#include<stdio.h>


int main()
{
    char word[25];
    while (scanf("%s", word)!=EOF){

    int cp=0, cm=0, i, j;

    //check palindrome
    for (i=0; i<strlen(word); i++){
        if (word[i]!=word[strlen(word)-1-i])
            break;
    }
    if (i==strlen(word)) cp=1;

    //check mirror
    for (i=0, j=strlen(word)-1; i<strlen(word); i++, j--){
        int dec=1;
        switch(word[i]){
            case 'A':
                dec = word[j]='A'? 1:0;
                break;
            case 'E':
                dec = word[j]='3'? 1:0;
                break;
            case 'H':
                dec = word[j]='H'? 1:0;
                break;
            case 'I':
                dec = word[j]='I'? 1:0;
                break;
            case 'J':
                dec = word[j]='L'? 1:0;
                break;
            case 'L':
                dec = word[j]='J'? 1:0;
                break;
            case 'M':
                dec = word[j]='M'? 1:0;
                break;
            case 'O':
                dec = word[j]='O'? 1:0;
                break;
            case 'S':
                dec = word[j]='2'? 1:0;
                break;
            case 'T':
                dec = word[j]='T'? 1:0;
                break;
            case 'U':
                dec = word[j]='U'? 1:0;
                break;
            case 'V':
                dec = word[j]='V'? 1:0;
                break;
            case 'W':
                dec = word[j]='W'? 1:0;
                break;
            case 'X':
                dec = word[j]='X'? 1:0;
                break;
            case 'Y':
                dec = word[j]='Y'? 1:0;
                break;
            case 'Z':
                dec = word[j]='5'? 1:0;
                break;
            case '1':
                dec = word[j]='1'? 1:0;
                break;
            case '2':
                dec = word[j]='S'? 1:0;
                break;
            case '3':
                dec = word[j]='E'? 1:0;
                break;
            case '5':
                dec = word[j]='Z'? 1:0;
                break;
            case '8':
                dec = word[j]='8'? 1:0;
                break;
            default:
                dec = 0;
                break;
        }
        if (!dec) break;
    }
    if (i==strlen(word)) cm=1;
    printf("%d %d %d\n", i, j, strlen(word));

    if (cp==1 && cm==1){
        printf("%s is a mirrored palindrome.\n", word);
    }
    else if (cp){
        printf("%s is a regular palindrome.\n", word);
    }
    else if(cm){
        printf("%s is a mirrored string.\n", word);
    }
    else if(cp==0 && cm==0) {
        printf("%s is not a palindrome.\n", word);
    }
}
}

Я даю строки, используя scanf ("% s", слово) Но когда я печатаю ту же самую последнюю программу в конце, используя printf ("% s", слово), строка частично модифицируется и не ' t печатать всю строку правильно.

Пример ввода

МММММ ATOYOTA NOTAPALINDROME ISAPALINILAPASI

Вывод:

3 1 5 MM��� - обычный палиндром , 4 2 7 ATO���� - правильный палиндром. 0 13 14 НОТАПАЛИНДРОМ - это не палиндром. 3 11 15 ISAPALINILAP��� - обычный палиндром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...