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

ANSI C - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разработать консольное приложение http://www.cyberforum.ru/cpp-beginners/thread94149.html
Условие: Разработать консольное приложение для управления программными проектами Вся информация приложения хранится в трех файлах: – работники (идентификатор работника; фамилия; специальность;...
C++ Не могу передать массив в функцию Ситуация следующая: Хочу сделать функцию для умножения матриц А и В. Т.е. чтобы параметрами функции были два массива А и В 3х3, а возвращался бы массив С 3х3 . Вопрос: Как передать в функцию... http://www.cyberforum.ru/cpp-beginners/thread94117.html
Массив по спирали C++
Помогите, пожалуйста, заполнить массив по спирали, начиная от середины по часовой стрелке: 9 2 3 8 1 4 7 6 5
C++ Разделить, считываемые из txt, строки точками
Задача такая: Написать программу, которая считывает текст из файла и выводит на экран только предложения, содержащие введенное с клавиатуры слово. Как я понимаю, суть программы в том, чтобы...
C++ Среди цифр введенной строки распечатать ту, которая появлялась чаще других http://www.cyberforum.ru/cpp-beginners/thread94054.html
помогите кто нибудь а то комп не работает, и какую книгу по си можно взять чтобы было написано простым языком 1..Среди цифр введенной строки распечатать ту, которая появлялась чаще других. Если...
C++ Вывести К-ый элемент последовательности. Есть последовательность 12345678910.... нужно вывести к-ый элемент. Например если ввожу 11,то выводит 0. Алгоритм вроде придумал, записать в массив типа сначала 1,2,3,4,5,6,7,8,9,... подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт CЭксперт С++
9693 / 5643 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
13.02.2010, 05:55
По поводу строки произвольного размера: по-умному нужно заморачиваться с низкоуровневыми функциями чтения/записи, буфером для чтения символов и выделением памяти под строку кратно этому буферу. А по-дебильному как-то типа так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
char *str = NULL;
int c;
long len = 1;
str = (char*)malloc(len);
*str = '\0';
while ( ( c = getchar() ) != EOF ){
  if ( ( str = (char*)realloc(str, len + 1) ) == NULL ){
    fprintf(stderr, "Basta, karapuziki, konchilisya tancy!\n");
    exit(1);
  }
  str[len-1] = c;
  str[len++] = '\0';
}
...
Но настоятельно не советую так делать!
Лучше всё-таки читать строку в буфер определённого, но достаточно большого размера. А чтобы было "с динамическим выделением памяти" - полно вариантов! Например:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char *reverse(char *s){
    char ch, *head, *tail;
    
    if ( !s || !*s )
        return NULL;
    for ( head = s, tail = s + strlen(s) - 1; head < tail; head++, tail-- ){
        ch = *head;
        *head = *tail;
        *tail = ch;
    }
    
    return s;
}
 
int main(void){
    char str[BUFSIZ], *r;
    
    printf("String: ");
    if ( !fgets(str, BUFSIZ, stdin) )
        exit(1);
    if ( r = strrchr(str, '\n') )
        *r = '\0';
    if ( !*str )
        exit(1);
    if ( ( r = strdup(str) ) == NULL )
        exit(1);
    printf("\nString: %s\nReverse: %s\n", str, reverse(r));
    
    free(r);
    exit(0);
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru