Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Гаряка Асмик
Статус: Профессионал
Рейтинг: 4377
∙ повысить рейтинг »
lamed
Статус: Профессионал
Рейтинг: 2752
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2480
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / C/C++

Номер выпуска:1556
Дата выхода:20.06.2010, 20:30
Администратор рассылки:Verena, Профессионал
Подписчиков / экспертов:366 / 165
Вопросов / ответов:1 / 1
IRC-канал по теме:#C

Вопрос № 179115: Здравствуйте Эксперты. 1. Дана строка.Определить длины всех её строк и сохранить их в одномерном массиве. В этой задаче я пытался сделать через стрленс,но при работе больше 1 строки стрелленс почему то терялся и грубо говоря издовал ужасные зна...



Вопрос № 179115:

Здравствуйте Эксперты.
1. Дана строка.Определить длины всех её строк и сохранить их в одномерном массиве.
В этой задаче я пытался сделать через стрленс,но при работе больше 1 строки стрелленс почему то терялся и грубо говоря издовал ужасные знаки.
2.Дан файл(текстовый). Найти кол-во символов А в нем.
(файл должен быть уже создан.)
Помогите, пожалуйста.

Отправлен: 15.06.2010, 20:16
Вопрос задал: Генадий Сержантов, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает amnick, Профессионал :
Здравствуйте, Генадий Сержантов.

Решение первой задачи приведено в предположении, что строка задана в формате MULTI_SZ, т.е. состоит из нескольких подстрок, заканчивающихся нулем, причем за последней строкой следует дополнительный нуль.

179115a.cpp
Код:
// Дана строка. Определить длины всех её строк (???) и сохранить их в одномерном массиве.

#include <stdio.h>
#include <string.h>
#include <stdlib.h> // для system()


// A list of strings, each terminated with NULL.
// The last string is followed by an additional NULL
char multiString[] = "first\0second\0third\0it is the forth\0and the last one\0";

int mai n( int argc, char* argv[] )
{
int len[10]; // массив длин строк
int i = 0;
char* p = multiString;
while( *p ) {
printf( "%s\n", p ); // отладочный вывод - очередная подстрока
int n = strlen( p ); // длина подстроки
len[i++] = n; // сохраняем в массиве
p += n+1; // переходим к следующей
}
printf( "\nДлины подстрок:\n" );
for( int j = 0; j < i; ++j )
printf( "%d. %d\n", j+1, len[j] );

system( "pause" );
return 0;
}


Решение второй задачи с использованием ввода/вывода в стиле C:

179115b.cpp
Код:
// Дан текстовый файл. Найти кол-во симв
 олов А в нем.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// подсчет числа повторений символа ch (кроме '\0') в файле pszFileName
// возвращает кол-во символов или -1 при ошибке открытия файла
long count_char( const char* pszFileName, unsigned char ch )
{
// открываем файл для чтения/записи с разделением доступа по чтению
FILE* f = fopen( pszFileName, "rt" );
if( !f ) return -1;

long count = 0; // кол-во искомых символов
char s[256]; // буфер для строк
while( fgets( s, sizeof s, f )) { // читаем очередную строку
char* p = strchr( s, ch ); // ищем первое вхождение искомого символа
while( p ) { // пока есть такой символ...
++count; // подсчитываем
p = strchr( p+1, ch ); // ищем следующий
}
}
fclose( f );
return count;
}

int main( int argc, char* argv[] )
{
char szInput[_MAX_PATH];
char *pInName;
if( argc >= 2 ) // если в командной строке переданы параметры,
pInName = argv[1]; // то первый из них - имя обрабатываемого файла
else { // иначе - запрашиваем имя файла у пользователя
printf( "Введите имя исходного файла: " );
pInName = gets( szInput );
}

long iResult = count_char( pInName, 'A' );
if( iResult == -1 ) {
printf( "Ошибка при открытии файла \"%s\"\n", pInName );
return 1;
}
printf( "В файле \"%s\" найдено %lu символов A.\n", pInName, iResult );
system( "pause" );
return 0;
}


Обе программы протестированы в MSVC++ 6.0.

Успехов!

Ответ отправил: amnick, Профессионал
Ответ отправлен: 15.06.2010, 21:16
Номер ответа: 262130

Оценка ответа: 5
Комментарий к оценке:
хороший ты)

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 262130 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.16 от 26.05.2010

    В избранное