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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2012, 21:36   #1
DETONAVOMEK
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 28
По умолчанию string

Есть две функции(выполняеться проверка, являеться ли строка словом без лишних символов).
Проблема в следующем. Первую букву проверяет, а на второй выскакивает ошибка "string subscript out of range". Что здесь не варно?
Код:
bool isSymbol(char c)
{
	char ch []= {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 
				's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
	for(int i=0;i<strlen(ch);i++)
		if(ch[i]==tolower(c)) return true;
	return false;
}
bool isWord(string &str)
{
	for(int i=0; i<str.size();i++)
		if(!isSymbol(str[i])) return false;
	return true;
}
DETONAVOMEK вне форума Ответить с цитированием
Старый 28.06.2012, 21:42   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

strlen работает только с строками, заканчивающимися нулём
Rififi вне форума Ответить с цитированием
Старый 28.06.2012, 21:49   #3
DETONAVOMEK
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
strlen работает только с строками, заканчивающимися нулём
Поставил 0. Все та же ошибка. Проблема в строке
Код:
if(!isSymbol(str[i])) return false;
когда і=1
DETONAVOMEK вне форума Ответить с цитированием
Старый 28.06.2012, 22:01   #4
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
#include <iostream>
#include <string>
#include <algorithm>

bool isword(const std::string& str)
{
    return std::all_of(str.begin(), str.end(), isalpha);
}

int main()
{
    std::cout << std::boolalpha << isword(std::string("word")) << std::endl;
    std::cout << std::boolalpha << isword(std::string("hell123")) << std::endl;
    system("pause");
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 28.06.2012, 22:19   #5
DETONAVOMEK
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Петррр Посмотреть сообщение
Код:
    return std::all_of(str.begin(), str.end(), isalpha);
В этой строке ошибки:
error C2039: 'all_of' : is not a member of 'std'
error C3861: 'all_of': identifier not found
Если важно, то пишу на Microsoft Visual Studio 2008
DETONAVOMEK вне форума Ответить с цитированием
Старый 28.06.2012, 22:21   #6
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

http://liveworkspace.org/code/79a394...e4d2882aa2b485
У меня VS 2010
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 28.06.2012, 22:33   #7
DETONAVOMEK
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 28
По умолчанию

Спасибо, буду что-то делать.
DETONAVOMEK вне форума Ответить с цитированием
Старый 29.06.2012, 22:39   #8
Sr.wills
 
Регистрация: 06.03.2010
Сообщений: 5
По умолчанию

По поваду strlen ,все строки заканчиваются 0 м
Sr.wills вне форума Ответить с цитированием
Старый 29.06.2012, 23:00   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
bool isSymbol(const char c)
{
        const char ch[] = "abcdefghijklmnopqrstuvwxyz";
       
        const size_t size = sizeof(ch)/sizeof(ch[0])-1;
        const char val = tolower(c);

	for(size_t i=0; i<size; ++i)
		if(ch[i]==val) return true;
	return false;
}
Вычислять нечто константное в цикле каждый раз заново - сама по себе не очень удачная идея.

Последний раз редактировалось _Bers; 30.06.2012 в 12:20.
_Bers вне форума Ответить с цитированием
Старый 30.06.2012, 01:13   #10
ZoRT
Пользователь
 
Регистрация: 20.01.2012
Сообщений: 16
По умолчанию

можно использовать стандартную isalpha, вместо вашей isSymbol.
ZoRT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
string-char-wchar_t-char-string чето потерял magog7 Общие вопросы C/C++ 0 08.08.2011 20:21
string (c++) jambas92 Помощь студентам 5 18.10.2010 16:44
String большого размера, более 255 String[255] bitSoft Общие вопросы Delphi 9 28.03.2010 19:45
Как получить адрес String строки или преобразовать String madboy4ik Общие вопросы по Java, Java SE, Kotlin 6 15.01.2010 11:57
string dreamish Общие вопросы C/C++ 18 04.09.2009 17:18