Вопрос № 179115: Здравствуйте Эксперты. 1. Дана строка.Определить длины всех её строк и сохранить их в одномерном массиве. В этой задаче я пытался сделать через стрленс,но при работе больше 1 строки стрелленс почему то терялся и грубо говоря издовал ужасные зна...
Вопрос № 179115:
Здравствуйте Эксперты. 1. Дана строка.Определить длины всех её строк и сохранить их в одномерном массиве. В этой задаче я пытался сделать через стрленс,но при работе больше 1 строки стрелленс почему то терялся и грубо говоря издовал ужасные знаки. 2.Дан файл(текстовый). Найти кол-во символов А в нем. (файл должен быть уже создан.) Помогите, пожалуйста.
Решение первой задачи приведено в предположении, что строка задана в формате 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
Код:
// Дан текстовый файл. Найти кол-во симв
олов А в нем.
// подсчет числа повторений символа 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 ); }
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.