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

Обсуждение

Неизвестный
15.06.2010, 20:35
общий
Генадий Сержантов:
Дана строка.Определить длины всех её строк

Как это понимать? Что подразумевается под строками в строке?
И задавайте, пожалуйста, по одному вопросу в вопросе, Ваши задачи 1 и 2 никак не связаны.
Неизвестный
15.06.2010, 20:36
общий
Генадий Сержантов:
1. Дана строка.Определить длины всех её строк и сохранить их в одномерном массиве.

Пожалуйста, поясните. "Дана строка" - одна строка. "Определить длины всех её строк" - какие еще строки могут быть в одной строке?
Может быть, имеется в виду то, что в windows называется MULTI_SZ? (Из MSDN: This data type consists of a list of strings, each terminated with NULL. The last string is followed by an additional NULL.)
Неизвестный
15.06.2010, 20:46
общий
Вот я сам её не понял.. этого преподователя..
как может быть такое?!.
может быть она имеела ввиду массив из строк.. просто это самое разумное что мне пришло на ум.
Неизвестный
15.06.2010, 21:16
общий
это ответ
Здравствуйте, Генадий Сержантов.

Решение первой задачи приведено в предположении, что строка задана в формате 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 main( 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.

Успехов!
5
хороший ты)
Форма ответа