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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Время скидок http://www.cyberforum.ru/cpp-beginners/thread256968.html
Помогите пожалуйста решить на си: Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 10% предоставляется, если сумма покупки больше 1000 руб. Ниже приведен рекомендуемый вид...
C++ При построчном чтении файла eof наступает раньше срока Здравствуйте, товарищи! Столкнулся с такой проблемой: при построчном потоковом чтении файла (при помощи getline) бит 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.Вычислить средееарифметическое...
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
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
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$


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