Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2011, 00:28   #1
EddieG
Пользователь
 
Регистрация: 18.09.2010
Сообщений: 42
По умолчанию Количество слов, состоящих только из латиницы

Помогите пожалуйста с функцией:
Подсчитать количество слов, состоящих только
из латинских букв для символьной строки.
Например:
"0x12 absd 123 43h e12 0 12g44 t" - 2


Код:
char ch[] = "0x12 absd 123 43h e12 12g44 t";

...

int xcount(char ch[])
{
    int i = 0;
    int j = 0;
    int m = 0;


    while(ch[i] != '\0')
    {
        if(ch[i] == ' ' || ch[i] == '\n')
        j++;

        i++;
    }

    return j;
}
Допущение несогласованных и логически несовместимых представлений - часть человеческого мышления.

Последний раз редактировалось Stilet; 10.01.2011 в 14:16.
EddieG вне форума Ответить с цитированием
Старый 10.01.2011, 00:40   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

а где у вас проверка на латиницу?
NiCola999 вне форума Ответить с цитированием
Старый 10.01.2011, 00:41   #3
kenwood2010
Пользователь
 
Регистрация: 26.11.2010
Сообщений: 97
По умолчанию

готово!

Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <cctype>


using namespace System;
using namespace std;


//проверка каждого слова
bool Rezword(char * s)
{
bool rez = true;
for(int j = 0; j < strlen(s); j++)
	{
		if(s[j] >= 'a' && s[j] <= 'z'){}
		else
		{
			rez = false;
		}
	}
return rez;
}

 int main ()
{
char str[80] = "/0";
char word[80] = "/0";
int a = 0, b = 0, count = 0;
bool flag = true;

cout<<"Vvedite str: ";
cin.get(str, 79);
for(int i = 0; i < strlen(str); i++)
{
	while(str[i] != ' ' && str[i] != '\0')
	{
		word[a++] = str[i++];
	}
	//подсчет слов
	flag = Rezword(word);
	if(flag==true)
	{
		count++;
	}
		
	for(int k=0; k < sizeof(word); k++)
	{
		word[k] = '\0';
	}
	a = 0;
  }


cout <<"Word =  "<<count; 
getch();
return 0;
kenwood20072@rambler.ru ICQ: 701 302 135. (Программирование на C++, С. Решение задач по физике)

Последний раз редактировалось kenwood2010; 10.01.2011 в 00:57.
kenwood2010 вне форума Ответить с цитированием
Старый 10.01.2011, 00:43   #4
EddieG
Пользователь
 
Регистрация: 18.09.2010
Сообщений: 42
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
а где у вас проверка на латиницу?
вот я не знаю как проверить на латиницу..
Допущение несогласованных и логически несовместимых представлений - часть человеческого мышления.
EddieG вне форума Ответить с цитированием
Старый 10.01.2011, 00:46   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

ну например вот так:
Код:
if( (str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z') )
хотя php же c++ подобный язык, там должна быть функция isalpha

мой вариант:
Код:
#include <iostream>

using namespace std;

int main()
{
    char str[50] = "0x12 absd 123 43h e12 12g44 t"; 
    int len = strlen(str), count = 0;
    bool is_lat = false;
    for(int i=0; i<len; i++){
            if(str[i] != ' '){
                      while(i < len && str[i] != ' '){
                              if( (str[i] >= 'A' && str[i] <= 'Z') || 
                                  (str[i] >= 'a' && str[i] <= 'z') ){
                                          is_lat = true;          
                                  }else{
                                          is_lat = false;                                          
                                          while( i< len && str[i] != ' ') i++;
                                  }
                              i++;
                      }
                      if(is_lat == true) count++;
            }
    }    
    cout << "Kolvo lat slov: "<<  count << endl;
    system("pause");
    return 0;
}

Последний раз редактировалось Stilet; 10.01.2011 в 14:25.
NiCola999 вне форума Ответить с цитированием
Старый 10.01.2011, 01:21   #6
EddieG
Пользователь
 
Регистрация: 18.09.2010
Сообщений: 42
По умолчанию

NiCola999, kenwood2010 Спасибо вам.
Допущение несогласованных и логически несовместимых представлений - часть человеческого мышления.
EddieG вне форума Ответить с цитированием
Старый 10.01.2011, 02:48   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

в "у кого короче играем"?) присоединяюсь
Код:
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
 
using namespace std;

bool isNotLatinAlpha(const char c)
{ return !(isalpha(c) && isascii(c)); }

bool checkWord(const string &str)
{ return find_if(str.begin(), str.end(), isNotLatinAlpha) == str.end(); }

int main()
{
	string str = "0x12 abssd 123 43h e12 12g44 t";
	stringstream ss(str);
	cout << count_if(istream_iterator<string>(ss), istream_iterator<string>(), checkWord) << endl;
	return 0;
}
ну и вариант на c++0x
Код:
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
 
using namespace std;

int main()
{
	string str = "0x12 abssd 123 43h e12 12g44 t";
	stringstream ss(str);
	cout << count_if(istream_iterator<string>(ss), istream_iterator<string>(),
			[&](string str) -> bool { return find_if(str.begin(), str.end(),
				[](char c) -> bool { return !(isalpha(c) && isascii(c)); } ) == str.end(); } ) << endl;
	return 0;
}
практически в одну строчку но код конечно, пугает
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 10.01.2011 в 04:23.
pproger вне форума Ответить с цитированием
Старый 10.01.2011, 11:43   #8
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

в одну строчку можно на ruby забацать =))
NiCola999 вне форума Ответить с цитированием
Старый 10.01.2011, 16:08   #9
EddieG
Пользователь
 
Регистрация: 18.09.2010
Сообщений: 42
Радость

Цитата:
Сообщение от pproger Посмотреть сообщение
в "у кого короче играем"?) присоединяюсь
Код:
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
 
using namespace std;

bool isNotLatinAlpha(const char c)
{ return !(isalpha(c) && isascii(c)); }

bool checkWord(const string &str)
{ return find_if(str.begin(), str.end(), isNotLatinAlpha) == str.end(); }

int main()
{
	string str = "0x12 abssd 123 43h e12 12g44 t";
	stringstream ss(str);
	cout << count_if(istream_iterator<string>(ss), istream_iterator<string>(), checkWord) << endl;
	return 0;
}
ну и вариант на c++0x
Код:
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
 
using namespace std;

int main()
{
	string str = "0x12 abssd 123 43h e12 12g44 t";
	stringstream ss(str);
	cout << count_if(istream_iterator<string>(ss), istream_iterator<string>(),
			[&](string str) -> bool { return find_if(str.begin(), str.end(),
				[](char c) -> bool { return !(isalpha(c) && isascii(c)); } ) == str.end(); } ) << endl;
	return 0;
}
практически в одну строчку но код конечно, пугает
Классно, код реально пугает) Ты крут!)
Рад, что заинтересовало!
Допущение несогласованных и логически несовместимых представлений - часть человеческого мышления.
EddieG вне форума Ответить с цитированием
Старый 10.01.2011, 16:36   #10
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2NiCola999
раздел вроде называется c/c++?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчитать количество слов и количество букв MDSIQ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.11.2010 16:57
С++ Написать программу, для вывода предложений, состоящих из заданного количества слов uropb992 Помощь студентам 0 28.05.2010 18:54
количество слов в тексте almareta Помощь студентам 3 01.04.2010 20:59
Дана строка, состоящая из нескольких слов. Найти количество слов, которые содержат хотя бы одну букву "А" Mashaa Помощь студентам 13 09.12.2009 13:28
Составить в алфавитном порядке список всех слов, встречающихся в тексте, и количество этих слов. KAPAHDAW Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2009 01:19