Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Сравнение строчных и заглавных букв.


Автор: Baltazar5000 23.3.2007, 07:20
Мне дан текст - "Sea War The Battles - Красивая трёхмерная версия игры."
Надо инициализировать его строковым массивом.
Сравнить английские заглавные и строчные буквы, каких и на сколько больше, всё это вывести на экран.
Заранее большое спасибо.

Автор: agl 23.3.2007, 11:50
#include <stdio.h>
#include <ctype.h>
Код

    int amountUpperCh[26] = {0};
    int amountLowerCh[26] = {0};
    char text[] = "abcdABCDaabbccdd1234POkl";
    for(int i = 0; text[i]; i++)
        if(isalpha(text[i]))
        {
    
            if(islower(text[i])) 
                amountLowerCh[text[i] - 'a']++;
        
            else        
                amountUpperCh[text[i] - 'A']++;
        
        }

    for(int j = 0; j < 26; j++)
        printf("%c = %d      %c = %d\n", j+'A', amountUpperCh[j], j+'a', amountLowerCh[j]);

Автор: Rockie 23.3.2007, 18:20
agl, 
Цитата(Baltazar5000 @  23.3.2007,  07:20 Найти цитируемый пост)
"Sea War The Battles - Красивая трёхмерная версия игры."

полагаю там не зря еще русские буквы добавили. Твой вариант (не проверял) сработает только для английского предложения.


Автор: agl 23.3.2007, 22:15
Цитата(Baltazar5000)
Сравнить английские заглавные и строчные буквы, каких и на сколько больше, всё это вывести на экран


Что автор написал, то и получил, а его текст мимо глаз пролетел))

Автор: Dov 24.3.2007, 10:33
Нет, Rockie, сработает нормально. Потому как isalpha() русские буквы за буквы не считает.  smile 
Другое дело, что можно перед выводом какой-нить if добавить, что бы "лишние"  символы не выводились. А так всё нормально.  smile

Автор: Baltazar5000 27.3.2007, 20:50
Спасибо, agl, но  amountLowerCh и amountUpperCh мы неизучали. Есть ли другие варианты?

Автор: zkv 27.3.2007, 21:01
Цитата(Baltazar5000 @  27.3.2007,  20:50 Найти цитируемый пост)
но  amountLowerCh и amountUpperCh мы неизучали

какой ужас! Немедленно пожалуйтесь преподавателю, такие вещи надо изучать в самую первую очередь!

Это была шутка smile

Автор: Dov 27.3.2007, 21:13
Baltazar5000, вот видишь. Всё стало на свои места. Потому как amountLowerCh и amountUpperCh это обычные массивы, элементами которых являются целые числа. agl просто решил хранить в них количество больших и маленьких букв. Ну и что здесь такого? Нормальное решение. А если ты хочешь какое-то специфическое решение, то скажи, что имено ты хочешь. Какие есть ограничения или пожелания. 
           Мы, ведь, чужих мыслей читать не умеем.  smile 

Автор: Baltazar5000 28.3.2007, 17:44
Спасибо понял, а что делать если я инициализарую так: str[M][N]="abcdEFgHjsdРУссКИЙ","АнглийСкий dfkDFgfk"([M][N]- это количество строк и столбцов), мне ошибку выдаёт...

Автор: apook 28.3.2007, 17:57
Цитата

ошибку выдаёт

какую?
Понял :
Код

char str[ ][ M ]={ "fdfdfdfdf", "gfgfgfgФвава, "и т.д"}

Автор: Rockie 28.3.2007, 18:19
Baltazar5000, например так
Код

#include "stdafx.h"
#include<iostream>

using namespace std;

int main()
{
    char str[4][7] = {"[0][0]", "[0][1]", "[1][1]", "[1][2]"};

    for(int i=0;i<4;i++)
      cout<<str[i]<<'\n';

    return 0;
}

Цитата(Dov @  24.3.2007,  10:33 Найти цитируемый пост)
Другое дело, что можно перед выводом какой-нить if добавить, что бы "лишние"  символы не выводились.

дожили, русские символы уже "лишние" smile 


Автор: Dov 28.3.2007, 19:22
Цитата(Rockie @  28.3.2007,  17:19 Найти цитируемый пост)
дожили, русские символы уже "лишние" 

Rockie, гы  smile , я имел ввиду символы, которые не участвуют в процессе. 
К тому же я ошибся, ф-ция isalpha() русские символы учитывает. smile  Поэтому прийдётся извращаться.   smile 
Код
#include <iostream.h>
#include <ctype.h>

#define M 2
#define N 80

int main()
{
    char text[][N] = {"abSDHjsdРУссКИЙf", "QWYАнглийСкийdfkDFk"};
    char upper[N]  = "";
    char lower[N]  = "";
    int  up = 0;
    int  lo = 0;

    for(int i = 0; i < M; i++)
        for(int j = 0; text[i][j] != '\0'; j++)
            if(text[i][j] >= 'a' && text[i][j] <= 'z' || text[i][j] >= 'A' && text[i][j] <= 'Z') 
                islower(text[i][j]) ? lower[lo++] = text[i][j] : upper[up++] = text[i][j];    

    // вывод пишешь сам, а это в качестве примера
    cout << lower << '\t' << lo << endl;
    cout << upper << '\t' << up << endl;    
    if(lo > up)
        cout << "маленьких больше, чем больших на " << lo - up;
    else if(up > lo)
        cout << "больших больше, чем маленьких на " << up - lo;
    else
        cout << "маленьких и больших поровну ";
    cout << endl;
    
    return 0;    
}

Автор: Baltazar5000 3.4.2007, 19:59
Огромнейшее спасибо, Dov. Но тему я ещё не закрываю.....

Автор: Baltazar5000 4.4.2007, 17:50
Как записать результат программки от Dov в файл(подключить функцию записи из отдельного файла)? И ещё как вывести на экран весь текст, у меня он выводит текст и на заднем фоне лишние символы. Заранее благадарю.

Автор: Dov 4.4.2007, 20:27
Baltazar5000, приведи пример выходного файла, что ты там хочешь увидеть?

Цитата(Baltazar5000 @  4.4.2007,  17:50 Найти цитируемый пост)
 И ещё как вывести на экран весь текст, у меня он выводит текст и на заднем фоне лишние символы.
 
Что такое 'на заднем фоне' ? Покажи.  smile  

Baltazar5000, ты пойми, чем больше покажешь, тем быстрее получишь помощь.  smile 

Автор: Baltazar5000 5.4.2007, 06:25
Расширение файла. abcd.dat
Внутри выведенные буквы и каких на сколько больше.
Задний фон у меня при помощи 
Код

Wind(int x1, int y1, int x2, int y2, int z1, int z2)
    {    // построение тени цветом z1
        window(x1, y1, x2, y2);textbackground(z1); clrscr();
        // построениеокна для вывода значений цветом z2
        window(x1 - 2, y1 - 1, x2 - 2, y2 - 1);textbackground(z2); clrscr();
        return 0;
    }

Автор: Baltazar5000 5.4.2007, 17:50
А всё на заднем фоне лишнего нет...исправил...
А файл не получается записать...

Автор: Dov 5.4.2007, 18:38
Ешё разок спрошу по-русски, потом на иврите буду спрашивать.  smile 

Цитата(Dov @  4.4.2007,  20:27 Найти цитируемый пост)
Baltazar5000, приведи пример выходного файла, что ты там хочешь увидеть?


Конкретно напиши. Допустим есть у тебя текст:
Код
char text[][N] = {"abSDHjsdРУссКИЙf", "QWYАнглийСкийdfkDFk"};


Приведи пример выходного файла после работы программы.  smile 

Автор: Dov 5.4.2007, 19:01
Короче, так устроит?
Код
#define M 2
#define N 80

int main()
{
    ofstream outFile;
    char text[][N] = {"abSDHjsdРУссКИЙf", "QWYАнглийСкийdfkDFk"};
    char upper[N]  = "";
    char lower[N]  = "";
    int  up = 0;
    int  lo = 0;

    for(int i = 0; i < M; i++)
        for(int j = 0; text[i][j] != '\0'; j++)
            if(text[i][j] >= 'a' && text[i][j] <= 'z' || text[i][j] >= 'A' && text[i][j] <= 'Z') 
                islower(text[i][j]) ? lower[lo++] = text[i][j] : upper[up++] = text[i][j];

    outFile.open("abcd.dat");        
    if(!outFile)
    {
        cout << "Unable to open file..\n";
        return 1;
    } 

    
    // вывод пишешь сам, а это в качестве примера
    cout << lower << '\t' << lo << endl;
    cout << upper << '\t' << up << endl;

    outFile << lower << '\t' << lo << endl;    
    outFile << upper << '\t' << up << endl;
    
    if(lo > up)
    {
        cout << "маленьких больше, чем больших на " << lo - up;
        outFile << "маленьких больше, чем больших на " << lo - up;    
    }
    else if(up > lo)
    {
        cout << "больших больше, чем маленьких на " << up - lo;
        outFile << "больших больше, чем маленьких на " << up - lo;    
    }
    else
    {
        cout << "маленьких и больших поровну ";
        outFile << "маленьких и больших поровну ";
    }
    cout << endl;

    outFile.close();
            
    return 0;            
}

Автор: GOBLIN_TT 10.6.2007, 12:36
Народ помогите написать прогу которая.

Преобразует заглавные латинские буквы в строчные.

Автор: apook 10.6.2007, 13:50
Цитата

 0::  #include <stdio.h>
 1::  #include <conio.h>
 2::  #include <ctype.h>
 3::  
 4::  
 5::  void main()
 6::  {
 7::  char TexT[ 256 ], *p;
 8::  
 9::  printf( "Input string:  " );
10::  fgets( TexT, 80, stdin );
11::  p=TexT;
12::  
13::  printf( "Output string: " );
14::  for( ;*p; p++ )
15::       printf( "%c", ( isupper(*p) ) ? tolower( *p ) : *p );
16::  
17::  getch();
18::  return;
19::  }
20::  
21::  

Автор: GOBLIN_TT 10.6.2007, 14:12
apook - Спасибо ))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)