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

Л/р "Использование строк" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Время скидок http://www.cyberforum.ru/cpp-beginners/thread256968.html
Помогите пожалуйста решить на си: Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 10% предоставляется, если сумма покупки больше 1000 руб. Ниже приведен рекомендуемый вид экрана во время выполнения программы (данные, введенные пользователем, выделены полужирным шрифтом). P.s должен получиться такой вывод: Вычисление стоимости покупки с учетом скидки
C++ При построчном чтении файла eof наступает раньше срока Здравствуйте, товарищи! Столкнулся с такой проблемой: при построчном потоковом чтении файла (при помощи getline) бит eof устанавливается раньше, чем положено (считывается меньше половины файла). При детальном изучении вопроса выяснил, что все ломается после попытки считывания строки, содержащей символ с кодом 0x1. Получается, что eof выставляется при наличие таких символов? Как... http://www.cyberforum.ru/cpp-beginners/thread256967.html
C++ требала с екстерналами
Всем не хворать! Пишу класс, чтото типа стринг. хедер: #pragma once class Cue { int size, step, curInd; char* Str; void newMem(); void terminate();
C++ не работает прога
прога работает она запускается,появляется окно,но сразу же отключается.. Дана матрица состоящая из N,M вещественных элементов. 1.Найти максимальный элемент 2.Вычислить средееарифметическое отрицательных элементов массива #include "stdafx.h" #include <iostream> #include "stdafx.h" #include"math.h" using namespace std; int main()
C++ Подсчитайте количество цифр, которые содержатся в строке http://www.cyberforum.ru/cpp-beginners/thread256933.html
Дана строка S. Подсчитайте количество цифр, которые в ней содержатся. Чтение и вывод входных данных с помощью файлов.
C++ не хочет работать код(((( #include <iostream.h> #include <fstream.h> #include <limits.h> #include <locale.h> #include <stdlib.h> #include <string.h> ....... { подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
14.03.2011, 14:51     Л/р "Использование строк"
main.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
#include <stdio.h>
#include <stdlib.h>
 
#include "handleErrors.h"
#include "capitalizeVowels.h"
 
#define ALLOC_STEP 5
#define safeFree(PTR) free(PTR), (PTR) = NULL
 
int main(int argc, char* argv[])
{
    FILE* fp;
    char** lines;
    char line[BUFSIZ];
    
    size_t currSize, size;
 
    currSize = size = 0;
 
    lines = NULL;
    
    if(argc != 2)
    errExit(1, "Usage: `%s' INPUT_FILE.\n", *argv);
 
    if((fp = fopen(argv[1], "a+b")) == NULL)
    errExit(1, "Can't open file `%s' for input.\n", argv[1]);
 
    while(fgets(line, BUFSIZ, fp))
    {
    if(currSize == size)
    {
        size += ALLOC_STEP;
        if((lines = realloc(lines, size * sizeof(char*))) == NULL)
        errExit(1, "Can't allocate memory.\n");
    }
    if((lines[currSize++] = duplicate(line)) == NULL)
        errExit(1, "Can't duplicate line.\n");
    }
 
    if(ferror(fp))
    errExit(1, "Error reading from file `%s'.\n", argv[1]);
    
    for(size = 0; size < currSize; ++size)
    {
    capitalizeVowels(lines[size]);
    if(fputs(lines[size], fp) == EOF)
        errExit(1, "Error writing to file `%s'.\n", argv[1]);
    if(fputs(lines[size], stdout) == EOF)
        errExit(1, "Error writing to stdout.\n", argv[1]);
    
    safeFree(lines[size]);
    }
    
    safeFree(lines);
        
    fclose(fp);
    exit(0);
}
capitalizeVowels.h:
C
1
2
3
4
5
6
7
#ifndef CAPITALIZE_H
#define CAPITALIZE_H
 
char* capitalizeVowels(char*);
char* duplicate(const char*);
 
#endif
capitalizeVowels.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
#include "capitalizeVowels.h"
 
#include <string.h>
#include <stdlib.h>
 
#define VOWELS "aeiouy"
#define DELIMS " \t\n,;?.!()'\"+=-*/&^%@#$"
 
static char* nextWord(char*, char*, const char*);
 
char* capitalizeVowels(char* line)
{
    char* word = NULL;
 
    while(word = nextWord(line, word, DELIMS))
    if(strchr(VOWELS, *word))
        *word += 'A' - 'a';
 
    return line;
}
 
char* duplicate(const char* str)
{
    char* dup = malloc(strlen(str) + 1);
    if(dup)
    strcpy(dup, str);
    return dup;
}
 
static char* nextWord(char* line, char* lastWord, const char* delims)
{
    if(lastWord)
    lastWord = strpbrk(lastWord, delims);
    else
    lastWord = line;
    while(lastWord && *lastWord && strchr(delims, *lastWord))
    ++lastWord;
    return (lastWord && *lastWord ? lastWord : NULL);
}
handleErrors.h:
C
1
2
3
4
5
6
#ifndef HANDLE_ERRORS_H
#define HANDLE_ERRORS_H
 
void errExit(int, const char*, ...);
 
#endif
handleErrors.c:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "handleErrors.h"
 
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
 
void errExit(int code, const char* fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    vfprintf(stderr, fmt, ap);
    va_end(ap);
    if(code)
    exit(code);
}
Пример работы программы:
Bash
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
nameless@nameless-laptop:~/c-sample$ cat txt.txt
       The mode string can also include the letter 'b' either as a last character or as a character between the characters
       in any of the two-character strings described above.  This is strictly  for  compatibility  with  C89  and  has  no
       effect;  the  'b' is ignored on all POSIX conforming systems, including Linux.  (Other systems may treat text files
       and binary files differently, and adding the 'b' may be a good idea if you do I/O to a binary file and expect  that
       your program may be ported to non-Unix environments.)
 
nameless@nameless-laptop:~/c-sample$ ./c-sample txt.txt
       The mode string can Also Include the letter 'b' Either As A last character Or As A character between the characters
       In Any Of the two-character strings described Above.  This Is strictly  for  compatibility  with  C89  And  has  no
       Effect;  the  'b' Is Ignored On All POSIX conforming systems, Including Linux.  (Other systems may treat text files
       And binary files differently, And Adding the 'b' may be A good Idea If You do I/O to A binary file And Expect  that
       Your program may be ported to non-Unix Environments.)
 
nameless@nameless-laptop:~/c-sample$ cat txt.txt
       The mode string can also include the letter 'b' either as a last character or as a character between the characters
       in any of the two-character strings described above.  This is strictly  for  compatibility  with  C89  and  has  no
       effect;  the  'b' is ignored on all POSIX conforming systems, including Linux.  (Other systems may treat text files
       and binary files differently, and adding the 'b' may be a good idea if you do I/O to a binary file and expect  that
       your program may be ported to non-Unix environments.)
 
       The mode string can Also Include the letter 'b' Either As A last character Or As A character between the characters
       In Any Of the two-character strings described Above.  This Is strictly  for  compatibility  with  C89  And  has  no
       Effect;  the  'b' Is Ignored On All POSIX conforming systems, Including Linux.  (Other systems may treat text files
       And binary files differently, And Adding the 'b' may be A good Idea If You do I/O to A binary file And Expect  that
       Your program may be ported to non-Unix Environments.)
 
nameless@nameless-laptop:~/c-sample$


Вывод в консоль не раскрашиваю, ты уж извини.
 
Текущее время: 12:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru