Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Dick777
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 135
1

Сравнение символов из строки

23.04.2015, 22:42. Просмотров 453. Ответов 5
Метки нет (Все метки)

Здравствуйте! У меня возникла проблема со строками. Есть структура, где в sName записываем каждый раз один символ
C
1
2
3
4
5
6
typedef struct
{
    char sName[1];
    float p;
    char *kod;
} symbol;
и есть строка

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
char* ReadMessange ()
{
    int i; char *s, name[20];
    printf("\n\tВыберите способ передачи сообщения для его кодирования\n");
    printf("  '1'- из файла, '2'- вручную: ");
    scanf("%i", &i);
    fflush(stdin); 
    switch (i)
    {
        case 1:
            printf("Введите имя файла: ");fflush(stdin);
            scanf("%s",&name);
 
            FILE* f;
            f = fopen(name,"r");
            fgets( s, 21, f);
            fclose(f);
            break;
 
        case 2:
            printf("Введите сообщение: ");
            gets(s);
            break;
    }
    return s;
}
мне нужно сравнить один символ строки s и sName (где и записан один символ)
я делаю так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void KodirovMessange (symbol* A, char *s, int n)
{
    int i, j;
    i=0;
    while (s[i]!='\0')
    {
        j=0;printf("%s ",s[i]);
        while (j<n)
        {
            if (A[j].sName== s[i])
                printf("%s", A[i].kod);
            else
                j++;
        }
        i++;
    }
}
ничего не выводит, почему то не приравнивается символ из строки s и символ sName. Подскажите пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2015, 22:42
Ответы с готовыми решениями:

Получить из данных строк новую, объединив N первых символов строки S1 и N2 последних символов строки S2
Здравствуйте, не могли бы вы помочь мне с этим заданием? Даны два числа: N1 и...

Получить новую строку, содержащую первые N1 символов строки S1 и последние N2 символов строки S2
Даны целые положительные числа N1 и N2 и строки S1 и S2. Получить из этих строк...

Получить из строк новую, объединив N1 первых символов строки S1 и N2 последних символов строки S2
Ребят, помогите решить пожалуйста. Заранее спасибо. Даны два числа: N1 и N2, и...

Сравнение символов
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;math.h&gt;...

Не работает сравнение символов
for (z = 0, j = 0; z &lt; r &amp;&amp; j != '\r' &amp;&amp; s != r;) { if...

5
XZentus
201 / 199 / 65
Регистрация: 06.10.2013
Сообщений: 552
23.04.2015, 22:52 2
C
1
2
3
printf("%s ",s[i]); //несоответствие типов
...
A[j].sName== s[i] //тоже самое. sName - это у вас строка. По-этому тут идет сравнение указателя и 1-го символа строки
0
Dick777
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 135
23.04.2015, 23:25  [ТС] 3
XZentus,хорошо, что можно исправить тогда?
0
XZentus
201 / 199 / 65
Регистрация: 06.10.2013
Сообщений: 552
23.04.2015, 23:29 4
C
1
2
3
printf("%c ",s[i]);
...
A[j].sName[0] == s[i]
Добавлено через 2 минуты
Но лучше объявить sName как просто char и не менять сравнение.

Добавлено через 36 секунд
Если это не создаст проблем в остальной части кода.
0
Dick777
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 135
23.04.2015, 23:44  [ТС] 5
XZentus,
Цитата Сообщение от XZentus Посмотреть сообщение
Если это не создаст проблем в остальной части кода.
создает. вот то, как заполняю эту структуру более подробный код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
symbol* InitMem(int N)
{
    symbol *A;
    A = (symbol*)calloc(N, sizeof(symbol));
    int i;
    for(i = 0; i < N; i++)
    {
        A[i].kod = (char*)calloc(2*N, sizeof(char));
        A[i].kod[0] = '\0';
    }
    return A;
}
symbol* ReadFile (symbol* A, int N)
{
    int i,j=0;char name[20];
    printf("Введите имя файла: ");
    scanf("%s",&name);
    FILE* f;
    f = fopen(name,"r");
    for(i=0; i<N; i++)
        fscanf(f,"%s %f",&A[i].sName, &A[i].p);
    fclose(f);
    return A;
}
void WriteResult (symbol* A, int N)
{
    int i,j;
    printf("\tРезультат: \n");
    printf("Символ: \t");
    for (i=0; i<N; i++)
        printf("%s\t",A[i].sName);
    printf("\n");
    printf("Вероятность: \t");
    for (i=0; i<N; i++)
        printf("%.2f\t",A[i].p);
    printf("\n");
    printf("\n\tКод:\n");
    for(i=0; i<N; i++)
    printf("\n%s   %s\n",A[i].sName,A[i].kod);
    printf("\n");
}
 
symbol* ReadTab(int n)
{
    symbol* A; int i;
    printf("Выберите способ ввода данных  1- файл, 2- вручную:  ");
    scanf("%i", &i);
    A= InitMem(n);
    switch (i)
    {
        case 1:
            A= ReadFile(A,n);
            break;
 
        case 2:
            printf("Введите символ и через пробел его вероятность\n");
            for (i=0; i<n; i++)
            {
                printf("%i-й символ:  ",i+1);
                scanf("%s %f",A[i].sName, &A[i].p);
                printf("\n");
            }
            break;
    }
    return A;
}
 
char* ReadMessange ()
{
    int i; char *s, name[20];
    printf("\n\tВыберите способ передачи сообщения для его кодирования\n");
    printf("  '1'- из файла, '2'- вручную: ");
    scanf("%i", &i);
    fflush(stdin);  //очищаем очередь ввода после scanf
    switch (i)
    {
        case 1:
            printf("Введите имя файла: ");fflush(stdin);
            scanf("%s",&name);
 
            FILE* f;
            f = fopen(name,"r");
            fgets( s, 21, f);
            fclose(f);
            break;
 
        case 2:
            printf("Введите сообщение: ");
            gets(s);
            break;
    }
    return s;
}
0
XZentus
201 / 199 / 65
Регистрация: 06.10.2013
Сообщений: 552
24.04.2015, 07:54 6
C
1
fscanf(f,"%s %f",&A[i].sName, &A[i].p); // Это тоже косяк с sName: передается адрес указателя. Пока там 1 символ, с учетом предыдущего косяка, к краху они не приведут. Но, если данные в файле записаны криво, можно уронить всю программу.
1
24.04.2015, 07:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2015, 07:54

Сравнение символов в строках
Добрый день! помогите написать прогу, которая будет сравнивать две строки и...

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

Функция пропускает первые n символов из строки str и формирует из оставшихся символов строку result
2. Написать функцию обработки строк: в качестве аргументов передаются в том...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru