Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Opiym
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
#1

Работа со строками - C++

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

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

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

Задача №4
[404]

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

Добавлено через 11 минут
Может что - то похожее есть ?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2009, 18:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа со строками (C++):

Работа со строками в С++ - C++
Здравствуйте, вы бы не могли мне помочь решить такую задачу: Дана строка, представляющая предложение. Слова в предложении состоят из ...

Работа со строками C++ - C++
Решил посвятить этой проблеме отдельную тему. В попытке написать ответ к этой задаче на С++ запнулся на работе со строками. Собственно...

Работа со строками - C++
Доброго времени суток! Пробую создать программу, которая разделяет строку на слова, убирает из них последующие включения первой буквы, и...

Работа со строками C++ - C++
Задание: Запросить у пользователя массив из 10 строк и вывести на экран те, которые равны слову «Ура». #include "stdafx.h" #include...

работа со строками - C++
Помогите пожайлуста!!! Задание такое: Удалить из текста все слова с четными номерами (сквозная нумерация слов по всему тексту). Кто...

Работа со строками С++ - C++
Задача вот с таким условием: В строке все вхождения подстроки str1 заменить подстрокой str2. Str2 вводится с клавиатуры. Помогите найти...

15
Gravity
563 / 557 / 39
Регистрация: 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
Opiym
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
20.11.2009, 19:24  [ТС] #3
Большоё спасибо !
Можно объяснить строки 10,11 и 15,16,17 ??? И что даёт ! перед scanf ??? Спасибо !
1
Gravity
563 / 557 / 39
Регистрация: 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
Opiym
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
20.11.2009, 19:51  [ТС] #5
Вынесет не то слово ! )))) Осталось только разобраться !
У тебя было готово или специально всё набирал ???
1
Gravity
563 / 557 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
20.11.2009, 19:59 #6
Да конечно, стал бы я все набирать. У меня таких исходников до кучи валяется. Так что, могут встретиться баги, хотя в 1 и 3 не должны.
0
Opiym
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
20.11.2009, 21:01  [ТС] #7
Да ! Вторая задача не работает ! ((
Не знаю что делать ! Прога норм компилируется и запускается, но после ввода s,s1,s2 выдаёт ошибку, что связанное с переменной q

Не подскажешь где можно скачать разные задачи по C с решениями, чтобы вникнуть лучше ??!
1
Gravity
563 / 557 / 39
Регистрация: 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
Opiym
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
20.11.2009, 21:23  [ТС] #9
О спасибо ! Всё работает ! ))

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


Откуда ты сам берёшь исходники ???
1
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
20.11.2009, 21:48 #10
Цитата Сообщение от Opiym Посмотреть сообщение
Откуда ты сам берёшь исходники ???
будешь помогать на форуме другим - соберешь свою личную коллекцию исходников
0
Opiym
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
20.11.2009, 21:57  [ТС] #11
Тоже верно ! )) Кто - нибудь объяснит что делает код от 5-ой до 25-ой строки ???
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
20.11.2009, 22:22 #12
Это функции выделения памяти с проверкой на ошибки
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
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
Opiym
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
21.11.2009, 23:47  [ТС] #14
Попробую ! ))
А за четвёртое кто - нибудь возьмётся ??? аххааа...))) Хотя может сам как - нибудь ! ))
0
Gravity
563 / 557 / 39
Регистрация: 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
22.11.2009, 00:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2009, 00:12
Привет! Вот еще темы с ответами:

Работа с строками - C++
Здравствуйте! Есть строка (предложение) надо убрать все пробелы, в т. ч. в начали конце и получить количество слов в этом предложении. ...

Работа со строками - C++
Приветствую, друзья-программисты. Дали в универе лабу по строкам. У нас выпала лекция и сказали самостоятельно изучить. Прочитал много...

Работа со строками - C++
Не могу написать правильно работающую программу для условия: Написать программу, которая к каждому слову в тексте добавляет сочетание...

Работа с строками - C++
И так дано StrCChar (s, c1, s2, n) надо заменить все символы c1 в строке s, начиная с позиции n, на строку s2. Надо на с++ и желательно...


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

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

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