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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2017, 14:34   #1
FerrariF70
Пользователь
 
Регистрация: 05.09.2017
Сообщений: 21
По умолчанию Указатели - надо начальную букву в слове сделать большой используя указатели

Здравствуйте помогите пожалуйста почему вылетает? задача такая что надо начальную букву в слове сделать большой.
заранее спасибо!

Код:
#include<stdio.h>

void uppercase(char *s);

int main()
{
	int i;
	char *words[] = { "Kuku","abc","good" };
	int size = sizeof(words) / sizeof(int);
	
	for (i = 0; i < size; i++) {
		uppercase (words+i);
	}
	for (i = 0; i < size; i++) {
		printf("%s ", *words + i);
	}
}

void uppercase(char **s)
{
	for (; *s != '\0'; s++) {
		if (**s >= 'a' && **s <= 'z') {
			**s -= 32;
			break;
		}
		break;

	}
}
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 05.09.2017 в 15:16.
FerrariF70 вне форума Ответить с цитированием
Старый 05.09.2017, 16:16   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 735
По умолчанию

Цитата:
Сообщение от FerrariF70 Посмотреть сообщение
Код:
char *words[] = { "Kuku","abc","good" };
- что-то здесь не то, в этой строке, не могу понять что, но определенно что-то здесь не то. Звездочку указателя там не надо ставить, по-моему.
Может быть Вы хотели написать вот так:
Код:
string words[] = { "Kuku","abc","good" };
Что-то мути много в программе. Берете просто первую строку в массиве words, потом эту строку рассматриваете как массив и берете первый элемент. Смотрите большая там буква или маленькая, кажется есть функция IsUpper() или нет не помню уже, но в любом случае можно по ASCII-кодам посмотреть. Если маленькая, то прибавляете 32. Все.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.

Последний раз редактировалось Cuprum5; 05.09.2017 в 16:23.
Cuprum5 вне форума Ответить с цитированием
Старый 05.09.2017, 16:34   #3
FerrariF70
Пользователь
 
Регистрация: 05.09.2017
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
- что-то здесь не то, в этой строке, не могу понять что, но определенно что-то здесь не то. Звездочку указателя там не надо ставить, по-моему.
Может быть Вы хотели написать вот так:
Код:
string words[] = { "Kuku","abc","good" };
Что-то мути много в программе. Берете просто первую строку в массиве words, потом эту строку рассматриваете как массив и берете первый элемент. Смотрите большая там буква или маленькая, кажется есть функция IsUpper() или нет не помню уже, но в любом случае можно по ASCII-кодам посмотреть. Если маленькая, то прибавляете 32. Все.
Код:
string *words[] = { "Kuku","abc","good" };
это массив указателей без звёздочки будет ошибка. насчёт isUpper() не проверял спасибо за совет. я проверял с toUpper() но это не то я так понял.

Последний раз редактировалось FerrariF70; 05.09.2017 в 16:36. Причина: забыл поставить [CODE] [/CODE]
FerrariF70 вне форума Ответить с цитированием
Старый 05.09.2017, 16:37   #4
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 735
По умолчанию

isupper() и islower() - с маленькой буквы пишется, я щас посмотрел. А звездочки там не надо, это я Вам 100-пудово говорю. Да, звездочку точно не надо, щас посмотрел в C++Builder 6.
А, вычесть нужно 32, а не прибавить.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.

Последний раз редактировалось Cuprum5; 05.09.2017 в 16:50.
Cuprum5 вне форума Ответить с цитированием
Старый 05.09.2017, 17:54   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
Сообщение от FerrariF70 Посмотреть сообщение
Здравствуйте помогите пожалуйста почему вылетает? задача такая что надо начальную букву в слове сделать большой.
заранее спасибо!

Код:
#include<stdio.h>

void uppercase(char *s);

int main()
{
	int i;
	char *words[] = { "Kuku","abc","good" };
	int size = sizeof(words) / sizeof(int);
	
	for (i = 0; i < size; i++) {
		uppercase (words+i);
	}
	for (i = 0; i < size; i++) {
		printf("%s ", *words + i);
	}
}

void uppercase(char **s)
{
	for (; *s != '\0'; s++) {
		if (**s >= 'a' && **s <= 'z') {
			**s -= 32;
			break;
		}
		break;

	}
}
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор
ты объявил массив указателей на строки, которые лежат в read only области памяти, их нельзя модифицировать.

Код:
#include <stdio.h>
#include <ctype.h>

void uppercase(char *s)
{
	*s = toupper(*s);
}

int main()
{
	int i;
	char words[][32] = { "Kuku", "abc", "good" };
	int size = sizeof(words) / sizeof(words[0]);

	for (i = 0; i < size; i++) {
		uppercase(words[i]);
	}

	for (i = 0; i < size; i++) {
		printf("%s ", words[i]);
	}
}
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 вне форума Ответить с цитированием
Старый 05.09.2017, 18:51   #6
FerrariF70
Пользователь
 
Регистрация: 05.09.2017
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
isupper() и islower() - с маленькой буквы пишется, я щас посмотрел. А звездочки там не надо, это я Вам 100-пудово говорю. Да, звездочку точно не надо, щас посмотрел в C++Builder 6.
А, вычесть нужно 32, а не прибавить.
islower() и isupper() это всего лишь проверка на символы нижнего и верхнего регистра.
FerrariF70 вне форума Ответить с цитированием
Старый 05.09.2017, 19:07   #7
FerrariF70
Пользователь
 
Регистрация: 05.09.2017
Сообщений: 21
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
ты объявил массив указателей на строки, которые лежат в read only области памяти, их нельзя модифицировать.
спасибо большое не учёл а вернее не знал что есть такая память только для чтения
это похоже больше как на const. и что получается когда я объявляю массив указателей
Код:
 *words[]={"..." , "..." , "..."}
их получается нельзя изменить? потому что они присутствуют как в виде массивов у которых есть свои адреса что по сути является массиву нельзя изменить адрес.


Код:
#include<stdio.h>

int main()
{
char *words[] = { "abc", "good" ,"Kuku" };
/*это одно и то же что и это?*/

char arr1[] = "abc";
char arr2[] = "good";
char arr3[] = "Kuku";
char *arr4[] = { arr1, arr2, arr3}; 

*words == *arr4 /* Одно и тоже? */
}

спасибо за решение задачи! Я думал так сделать но хотел всё таки с указателями дойти до этого решения.

Последний раз редактировалось FerrariF70; 05.09.2017 в 19:29.
FerrariF70 вне форума Ответить с цитированием
Старый 05.09.2017, 19:44   #8
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 735
По умолчанию

Цитата:
Сообщение от FerrariF70 Посмотреть сообщение
islower() и isupper() это всего лишь проверка на символы нижнего и верхнего регистра.
- ну да, разве тебе не это нужно? Проверяешь символ - маленький/большой, если маленький, то отнимаешь 32. Понял?
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 05.09.2017, 20:04   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от FerrariF70 Посмотреть сообщение
и что получается когда я объявляю массив указателей
Нет, когда вы используете строковые литералы ("..."). Массив не причем.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.09.2017, 20:26   #10
FerrariF70
Пользователь
 
Регистрация: 05.09.2017
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
- ну да, разве тебе не это нужно? Проверяешь символ - маленький/большой, если маленький, то отнимаешь 32. Понял?
не совсем это. просто надо было поменять лишь начальную букву можно и таким способом было. но меньше кода красивее смотрится .
FerrariF70 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из текстового файла прочитать предложение, первую букву каждого слова сделать большой romaust C# (си шарп) 0 04.05.2016 10:51
Переписать программу, используя указатели Dark Illusion Общие вопросы C/C++ 0 12.12.2012 12:49
задача используя указатели на структуру ЕВГЕНИЙ Ермакович Помощь студентам 0 04.03.2012 17:36
как упростить код, используя только массивы, циклы, разветвления и указатели? laxe Общие вопросы C/C++ 22 01.09.2009 09:16
нужно решить задачу используя указатели С++ Nastusha Помощь студентам 4 08.02.2009 22:45