Vishal Gupta Ответов: 2

Проверка уникальных символов


Я пробовал это без использования функции, и код дает мне правильный вывод, но при наложении функции на код код всегда дает мне "не уникальные символы" в качестве вывода, я думаю, что указатель изменяется при сравнении символов или может быть другая причина, которую я не получаю. Пожалуйста помочь

Что я уже пробовал:

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

int uniquechar(char [] , int);

main()
{
    char c[100];
    int n,x;

    scanf("%s",c); //taking string input
    n = strlen(c);  //length of string

    x = uniquechar(c,n); //function for unique characters

    if(x == 1)
        printf("Not unique char");
    else
        printf("Unique chars");
}

int uniquechar(char b[] , int n)
{
    int i , j , flag = 0;

    for(i = 0;i < n;i++)
    {
        for(j = i+1;j < n;j++)
        {
            if(b[i] == b[j])
            {
                flag = 1;
                break;
            }
        }
    }
    if(flag = 1)
        return 1;
    else
        return 0;
}

2 Ответов

Рейтинг:
8

Patrice T

Настоящий кодекс:

if(flag = 1)
    return 1;
else
    return 0;

может быть упрощен до
return flag;

и это также решает проблему, как описано в решении 1. Изучите отладчик, этот инструмент помогает найти точки сбоя в коде.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
13

Thomas Daniels

Вот в чем проблема:

if(flag = 1)

Сингл = означает назначение, то есть "я даю значение этой переменной". Однако компилятор не выдает ошибку, поскольку выражение name = value возвращается value после установки переменной, так что то, что вы на самом деле делаете здесь, это if (1) { ... } и это всегда так. Вам нужен оператор равенства == вместо.


Vishal Gupta

спасибо, эти глупые ошибки я так много делаю в кодировании и всегда застреваю, так что можете ли вы дать мне решение, как я могу преодолеть эти ошибки

Thomas Daniels

Научитесь использовать отладчик. Это инструмент, который позволяет вам запускать свой код шаг за шагом и проверять, каковы текущие значения переменных и тому подобное. Если бы шаг отладчика был бы на этом операторе if, вы бы посмотрели на него и, вероятно, заметили, что вы сделали неправильно. Все делают ошибки, и отладчик помогает их найти :-)