Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
1

Работа со строками

20.11.2009, 18:30. Показов 1782. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Люди, если есть у кого время прошу просветить на тему Работу со строками ! Начили изучать, а примеров никаких нет ! И надо решить четыре задачи, но четвёртую не обязательно.....Спасибо !

Задача №1
[404]
Задача №2
[404]
Задача №3
[404]

Задача №4
[404]

Ещё раз спасибо !

Добавлено через 11 минут
Может что - то похожее есть ?
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2009, 18:30
Ответы с готовыми решениями:

Работа со строками. Функции работы со строками
Дана строка символов. В заданном тексте определить позицию первой точки ‘ . ‘.

Работа со строками, заполнить компоненты строками из файла
Привет! Нужна помощь в заполнении формы В общем, есть форма отправки письма. У нее есть 2 функции,...

Работа со строками(операции над строками)
Пусть дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных...

Задание по темам: ООП, исключения, работа со строками (возможно применение коллекций List), работа с компоновщиком
ТЯЖЕЛО РАБОТАТЬ С КОМПОНОВЩИКОМ. БУДУ РАД ВАШИМ ОТВЕТАМ. 1. Ознакомиться с принципом работы...

15
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
20.11.2009, 18:41 2
#1
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    int i, n;
    char s[27];
 
    printf("enter n: ");
    if(!scanf("%d", &n) || n < 1 || n > 26) {
        printf("n: bad input!\n");
        return 1;
    }
 
    for(i = 0; i < n; i++)
        s[i] = 'z' - i;
    s[i] = '\0';
    printf("result: %s\n", s);
 
    return 0;
}
1
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
20.11.2009, 19:24  [ТС] 3
Большоё спасибо !
Можно объяснить строки 10,11 и 15,16,17 ??? И что даёт ! перед scanf ??? Спасибо !
1
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
20.11.2009, 19:43 4
10, 11 - ввод числа. Если n введено неверно, получишь сообщение об ошибке. 15, 16, 17 - заполнение строки буквами с конца алфавита.

Это тебе, чтобы совсем мозг вынесло:
#2
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void *xmalloc(size_t size)
{
    void *ptr;
 
    if( (ptr = malloc(size)) == NULL) {
        perror("malloc");
        exit(-1);
    }
    return ptr;
}
 
void *xrealloc(void *oldptr, size_t size)
{
    void *ptr;
 
    if( (ptr = realloc(oldptr, size)) == NULL) {
        perror("realloc");
        exit(-1);
    }
    return ptr;
}
 
int main(void)
{
    int i, maxline = 512;
    char *s, *s1, *s2, *p, *q;
 
    s  = (char *) xmalloc(maxline);
    s1 = (char *) xmalloc(maxline);
    s2 = (char *) xmalloc(maxline);
 
    printf("enter s: ");
    fgets(s, maxline, stdin);
    printf("enter s1: ");
    fgets(s1, maxline, stdin);
    printf("enter s2: ");
    fgets(s2, maxline, stdin);
    
    for(p = s; (p = strstr(p, s1)) != NULL; q = p, p++)
        ;
    i = q - s;
    if(maxline < i + strlen(s2) + 1)
        s = (char *) xrealloc(s, maxline * 2);
    
    strcpy(s + i, s2);
    printf("result: %s", s);
 
    free(s);
    free(s1);
    free(s2);
    return 0;
}
#3
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
#include <stdio.h>
 
int main(void)
{
    char s[4096];
    int i, j, flag = 0;
 
    printf("enter string: ");
    fgets(s, sizeof(s), stdin);
 
    for(i = 0; s[i] != '\0'; i++)
        if(i == 0 && s[i] == '-') {
            flag = 1;
            break;
        } else if(i == 0 && s[i] == ' ') {
            for(j = i; s[j] == ' '; j++)
                ;
            if(s[j] == '-') {
                flag = 1;
                break;
            }
        } else {
            break;
        }
 
    flag ? printf("Предложение начинается на тире, "
                    "перед которым могли находиться пробелы.\n") :
           printf("Нифига!\n");
    return 0;
}
1
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
20.11.2009, 19:51  [ТС] 5
Вынесет не то слово ! )))) Осталось только разобраться !
У тебя было готово или специально всё набирал ???
1
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
20.11.2009, 19:59 6
Да конечно, стал бы я все набирать. У меня таких исходников до кучи валяется. Так что, могут встретиться баги, хотя в 1 и 3 не должны.
0
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
20.11.2009, 21:01  [ТС] 7
Да ! Вторая задача не работает ! ((
Не знаю что делать ! Прога норм компилируется и запускается, но после ввода s,s1,s2 выдаёт ошибку, что связанное с переменной q

Не подскажешь где можно скачать разные задачи по C с решениями, чтобы вникнуть лучше ??!
1
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
20.11.2009, 21:13 8
Цитата Сообщение от Opiym Посмотреть сообщение
Не знаю что делать ! Прога норм компилируется и запускается, но после ввода s,s1,s2 выдаёт ошибку, что связанное с переменной q
Пропатченная версия второй проги:
prog02.c
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void *xmalloc(size_t size)
{
    void *ptr;
 
    if( (ptr = malloc(size)) == NULL) {
        perror("malloc");
        exit(-1);
    }
    return ptr;
}
 
void *xrealloc(void *oldptr, size_t size)
{
    void *ptr;
 
    if( (ptr = realloc(oldptr, size)) == NULL) {
        perror("realloc");
        exit(-1);
    }
    return ptr;
}
 
int main(void)
{
    int i, maxline = 512;
    char *s, *s1, *s2, *p, *q;
 
    s  = (char *) xmalloc(maxline);
    s1 = (char *) xmalloc(maxline);
    s2 = (char *) xmalloc(maxline);
 
    printf("enter s: ");
    fgets(s, maxline, stdin);
    printf("enter s1: ");
    fgets(s1, maxline, stdin);
    printf("enter s2: ");
    fgets(s2, maxline, stdin);
    
    for(p = s, q = NULL; (p = strstr(p, s1)) != NULL; q = p, p++)
        ;
    if(q == NULL) {
        printf("В s не найдено вхождений s1.\n");
        goto EXIT;
    }
 
    i = q - s;
    if(maxline < i + strlen(s2) + 1)
        s = (char *) xrealloc(s, maxline * 2);
    
    strcpy(s + i, s2);
    printf("result: %s", s);
 
 EXIT:
    free(s);
    free(s1);
    free(s2);
    return 0;
}

Вылетало из-за того, что не было проверки, когда в строке нет вхождений.
Цитата Сообщение от Opiym Посмотреть сообщение
Не подскажешь где можно скачать разные задачи по C с решениями, чтобы вникнуть лучше ??!
Читай Б. Кернигана, Д. Ритчи "Язык программирования Си". Там есть задачи в конце каждой темы. Или можешь на этом форуме поискать для себя задачи.
1
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
20.11.2009, 21:23  [ТС] 9
О спасибо ! Всё работает ! ))

Вопрос: от 5-ой до 25-ой строки ! Что это ? Для чего ? Я совсем чайник ! Я раньше в Delphi немного програмил, а сча торможу...))))


Откуда ты сам берёшь исходники ???
1
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.11.2009, 21:48 10
Цитата Сообщение от Opiym Посмотреть сообщение
Откуда ты сам берёшь исходники ???
будешь помогать на форуме другим - соберешь свою личную коллекцию исходников
0
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
20.11.2009, 21:57  [ТС] 11
Тоже верно ! )) Кто - нибудь объяснит что делает код от 5-ой до 25-ой строки ???
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.11.2009, 22:22 12
Это функции выделения памяти с проверкой на ошибки
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
21.11.2009, 00:45 13
Второе задание - впечатлило решение от Gravity, решил тоже попробовать
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/* возвращает указатель на последнее вхождение needle в stack или NULL */
char *strrstr(char *stack, char *needle){
    size_t stack_len, needle_len;
    char *pNeedle;
    
    if ( !stack || !(*stack) || !needle || !(*needle) )
        return NULL;
    stack_len = strlen(stack);
    needle_len = strlen(needle);
    if ( stack_len < needle_len )
        return NULL;
    
    for ( pNeedle = stack + stack_len - needle_len; pNeedle >= stack; pNeedle-- )
        if ( !memcmp(pNeedle, needle, needle_len) )
            return pNeedle;
    
    return NULL;
}
 
 
int main(){
    char *s = "abcdef abcdef abcdef abcdef";
    char *s1 = "cde";
    char *s2 = "zzzzz";
    char *pS1, *result;
    size_t result_lenght;
    
    if ( (pS1 = strrstr(s, s1)) == NULL ){
        printf("\"%s\" not found in \"%s\"\n", s1, s);
        exit(1);
    }
    result_lenght = strlen(s) - strlen(s1) + strlen(s2) + 1;
    if ( (result = (char*)malloc(result_lenght)) == NULL ){
        printf("Not enough memory!\n");
        exit(1);
    }
    strncpy(result, s, pS1 - s);
    strcat(result, s2);
    if ( *(pS1 + strlen(s1)) != '\0' )
        strcat(result, pS1 + strlen(s1));
    
    printf("String:  %s\n", s);
    printf("Replace: %s\n", s1);
    printf("By:      %s\n", s2);
    printf("Result:  %s\n", result);
    
    free(result);
    result = NULL;
    
    exit(0);
}
Добавлено через 1 час 51 минуту
3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <ctype.h>
 
int main(){
    char buf[BUFSIZ], *p;
    
    while ( 1 ){
        printf("\nEnter some string or just press ENTER to exit\n> ");
        fgets(buf, BUFSIZ, stdin);
        if ( *buf == '\n' )
            break;
        
        for ( p = buf; isspace(*p); p++ )
            ;
        if ( *p == '-' )
            printf("OH YEAH! I FOUND IT! THE DASH IS FIRST CHARACTER!!!\n");
        else
            printf("No any dashes at start of string.\n");
    }
    
    return 0;
}
1
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
21.11.2009, 23:47  [ТС] 14
Попробую ! ))
А за четвёртое кто - нибудь возьмётся ??? аххааа...))) Хотя может сам как - нибудь ! ))
0
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
22.11.2009, 00:12 15
#4
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
#include <stdio.h>
 
int main(void)
{
    char s[4096], *p;
    int cnt, is_br;
 
    printf("Введите строку: ");
    fgets(s, sizeof(s), stdin);
 
    cnt = is_br = 0;
    for(p = s; *p != '\0'; p++)
        if(*p == ')') {
            if(cnt)
                cnt--;
            else {
                printf("Ошибочная закрывающая скобка в "
                        "позиции %d\n", p - s);
                return 1;
            }
        } else if(*p == '(') {
            is_br = 1;
            cnt++;
        }
    
    if(cnt)
        printf("-1: закрывающих скобок не хватает.\n");
    else if(!is_br)
        printf("Скобок вообще не найдено O_o\n");
    else
        printf("0: все верно.\n");
    return 0;
}
1
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
22.11.2009, 13:27  [ТС] 16
О ! Спс ! Буду пробовать !

Всем большое СПАСИБО ! Выручили !
0
22.11.2009, 13:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2009, 13:27
Помогаю со студенческими работами здесь

Работа со строками
Задача: Выяснить, верно ли, что в заданной строке есть подряд идущие три буквы &quot;л&quot;,большие или...

работа со строками
Имеется строка символов. В числе прочих в этой строке допускается использование скобок трех типов –...

Работа со строками
Удалить каждый символ 'A', стоящий после ',', и подсчитать отдельно количество пар “BC” и “DE” .

Работа со строками
Дана строка состоящая из слов, разделенных пробелами. С использованием процедур и функций...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru