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

Разбивка по функциям строки

20.02.2012, 20:43. Просмотров 437. Ответов 8
Метки нет (Все метки)

Есть работающий код по строкам, но при разбиения по функциям возникают проблемы.
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
#include <stdio.h>
#include <stdlib.h>
 
int Space(int sp)
{
    return sp;
}
 
int main()
{
    char str[256];
    printf("Enter string: ");
    gets(str);
    
    int n;
    printf("Enter n: ");
    scanf("%d",&n);
    
    int sp=0,k=0;
    char str2[256];
    
    for(int i=0;str[i];i++)
    {
        if(k==n) break;
        if(str[i]!=' ')
        {
            str2[i]=str[i];
            k++;
        }
        else if(str[i]==' ')
        {
            str2[i]=str[i];
            sp++;
            Space(sp);
        }
    }
    
    printf("String = %s\nSpace = %d\n",str2,sp);
    
    for(int i=0, j=1;str[i];i++,j++)
    {
        if(str[i]!=' ')
            if(str[i]==str[j]) printf("str[%d] = str[%d] = %c\n",i,j,str[i]);
    }
            
    system("PAUSE");
    return 0;
}
Добавлено через 1 минуту
Запускается, но крешится.
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
#include <stdio.h>
#include <stdlib.h>
 
 
int Space( int sp, char *str, char *str2)
{
    for(int i=0;str[i];i++)
    
        if(str[i]==' ')
        {
            str2[i]=str[i];
            sp++;
            return sp;
        }
} 
 
int elements(char *str)
{
    for(int i=0, j=1;str[i];i++,j++)
    {
        if(str[i]!=' ')
            if(str[i]==str[j]) printf("str[%d] = str[%d] = %c\n",i,j,str[i]);
    }
}
 
int main()
{
    char *str[256];
        printf("Enter string: ");
        gets(*str);
    
    int n;
    printf("Enter n: ");
    scanf("%d",&n);
    
    int sp=0,k=0;
    char *str2[256];
    for(int i=0;str[i];i++)
     {
        if(k==n) break;
        if(*str[i]!=' ')
        {
            *str2[i]=*str[i];
            k++;
        }   
     }
    Space(sp, *str, *str2);
    elements( *str);
    printf("String = %s\nSpace = %d\n",*str2,sp);
    
         
    system("PAUSE");
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2012, 20:43
Ответы с готовыми решениями:

задача по функциям
Условие таково: Создать программу, которая выполняет действия из задания 1 и...

Распределение кода по функциям
Есть программа, но все сделано в одной функции main. А нужно разделить все на...

Linked lists! (Разбивка предложений)
HELP! Есть ли здесь Гуру способные помочь??? ЗАДАЧА-УБИЙЦА МОИХ НЕРВОВ....

Разбивка программы со структурой на функции
Здраствуйте, помогите пожалуйста разбить программу на функции #include...

Разбивка текстового файла по элементам структуры
Народ, дали задание: &quot;Нужно заполнить структуры из файла, данные в файле...

8
soon
2546 / 1311 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.02.2012, 20:56 2
Цитата Сообщение от Chiakiii Посмотреть сообщение
char *str[256];
printf("Enter string: ");
gets(*str);
5букв
0
Evg
Эксперт CАвтор FAQ
19626 / 7318 / 551
Регистрация: 30.03.2009
Сообщений: 20,462
Записей в блоге: 30
20.02.2012, 20:58 3
Объясните ТС'у, что переход от "char str[256]" к "char *str[256]" попросту неправомерный
0
soon
2546 / 1311 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.02.2012, 21:06 4
Цитата Сообщение от Evg Посмотреть сообщение
Объясните ТС'у, что переход от "char str[256]" к "char *str[256]" попросту неправомерный
ТС в первой версии программы правильно написал. Так что это, возможно, просто опечатка.
0
Evg
Эксперт CАвтор FAQ
19626 / 7318 / 551
Регистрация: 30.03.2009
Сообщений: 20,462
Записей в блоге: 30
20.02.2012, 21:18 5
Цитата Сообщение от soon Посмотреть сообщение
С в первой версии программы правильно написал. Так что это, возможно, просто опечатка
Дык я и говорю, что надо объяснить, что при переходе от первой версии ко второй произошла замена массива char'ов на массив указателей на char. Видимо, из-за того, что функции начали принимать указатель на char, и что-то ТС'а заклинило на этом и он все массивы превратил в массивы указателей
0
Chiakiii
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 38
20.02.2012, 21:45  [ТС] 6
Проще сказать, как происходит инициализация массива в функции? Например:
C
1
2
3
4
5
6
7
8
9
10
11
int Space( int sp, ??? str, ??? str2)
{
    for(int i=0;str[i];i++)
    
        if(str[i]==' ')
        {
            str2[i]=str[i];
            sp++;
            return sp;
        }
}
Указатели как-то особо не помогли..При char str[256] ошибка char to char
0
soon
2546 / 1311 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.02.2012, 21:47 7
Цитата Сообщение от Chiakiii Посмотреть сообщение
int Space( int sp, ??? str, ??? str2)
C
1
int Space( int sp, char* str, char* str2)
Добавлено через 48 секунд
Chiakiii, кстати, а если там не будет пробела?
1
Evg
Эксперт CАвтор FAQ
19626 / 7318 / 551
Регистрация: 30.03.2009
Сообщений: 20,462
Записей в блоге: 30
20.02.2012, 22:04 8
C
1
2
3
4
5
6
7
8
9
10
int Space( int sp, char* str, char* str2)
...
char str[256];
...
char str2[256];
...
Space(sp, str, str2);
 
/* Либо, что то же самое */
Space(sp, &(str[0]), &(str2[0]));
Цитата Сообщение от soon Посмотреть сообщение
Chiakiii, кстати, а если там не будет пробела?
Пробел роли не играет
1
Chiakiii
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 38
27.02.2012, 22:57  [ТС] 9
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
94
95
96
97
98
99
100
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
int Space( int sp, char* str, char* str2)
{
    for(int i=0;str[i];i++)
    
        if(str[i]==' ')
        {
            str2[i]=str[i];
            sp++;
        }
        printf("Space = %d\n",sp);
} 
 
int elements(char* str)
{
    for(int i=0, j=1;str[i];i++,j++)
    {
        if(str[i]!=' ')
            if(str[i]==str[j]) printf("str[%d] = str[%d] = %c\n",i,j,str[i]);
    }
}
 
int Savetofile(char* str, char const *frame)
{
 FILE *F= fopen(frame,"wt");
 if(F==NULL) 
    {
        return 0;
    }
    fprintf(F,"%s ",str);
    fprintf(F,"\n");
    fclose(F);
    return 1;
}
int Savetofile2(char* str2, char const *frame)
{
 FILE *F= fopen(frame,"wt");
 if(F==NULL) 
    {
        return 0;
    }
    fprintf(F,"%s ",str2);
    fprintf(F,"\n");
    fclose(F);
    return 1;
}
int Loadstr(char* str, char const *fname)
{
    int n;
    FILE*f=fopen(fname,"rt");
    if(f==NULL)return -1;
    
    fscanf(f,"%s",&n);
    fscanf(f,"%s",&str);
 
    fclose(f);
    return n;
}
int main()
{
    char str[256];
        printf("Enter string: ");
        gets(str);
    int h;
    h=strlen(str);
    
    int n;
    printf("Enter n: ");
    scanf("%d",&n);
    
    int sp=0,k=0;
    char str2[256];
    for(int i=0;str[i];i++)
     {
        if(k==n) break;
        {
            str2[i]=str[i];
            k++;
        }   
     }
    if (n<=h)
    {
    printf("String = %s\n",str2);
    Space(sp, str, str2);
    elements(str);
    Savetofile(str, "stroka.txt");
    Savetofile2(str2, "stroka2.txt");
    printf("Reading from stroka.txt:\n");
    Loadstr(str, "stroka.txt");
    
    }else printf("Error!\n");
    
         
    system("PAUSE");
    return 0;
}
Строка сохраняется в файл, но не читает из него. Подскажите, где неправильно.
0
27.02.2012, 22:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2012, 22:57

Задача по функциям и процедурам в языке С. Подпрограмма
Даны два предложения . В каком из них доля (в%) буквы б больше . ( Определить...

Написать утилиту составления числа по трем функциям
Написать утилиту составления числа по трем функциям /* * Возвращает число со...

Написать свои функции работы со строками аналогичные функциям из <string.h>
надо было написать свои функции работы со строками аналогичные функциям из...


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

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

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