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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2012, 15:35   #1
zmey1
Пользователь
 
Регистрация: 15.08.2011
Сообщений: 30
По умолчанию Строковые массивы

Всем привет.

Ребят у меня есть такая задача:
Дана строка, содержащая слова, разделенные одним или несколькими разделительными символами (пробелами, табуляторами), в начале строки и в конце строки также могут находиться разделительные символы. Сформировать новую строку на основе исходной строки, из которой удалены слова, встречающиеся в исходной строке только один раз. Оставшиеся слова разделяются одним пробелом. В начале строки и в конце строки не должно быть разделительных символов.

Натолкните на идею, как и какие инструменты СИ нужно использовать?
Я уже и с массивами пробовал и с указателями и никак не могу понять, как в итоге сравнивать слова...
Так в СИ запрещено записывать целое слово в один элемент массива, меня это вводит в ступор)
С числами подобные операции получаются слету и без проблем, а вот со строками что то грустно в СИ.

Помогите, пожалуйста.
Заранее благодарю.

Последний раз редактировалось zmey1; 16.11.2012 в 15:44.
zmey1 вне форума Ответить с цитированием
Старый 16.11.2012, 15:45   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Слово = указатель на первую букву слова;
Указатели на первые буквы слов можно свести хоть в массив, хоть куда.
Сравнивать слова, при таком определении слов - легко. Вот компактный вариант на указателях; если это непонятно - напишите свой, развёрнутый:
Код:
bool EqualWords(const char* a, const char* b){
  while(isalpha(*a) && isalpha(*b)) if(*a++ != *b++) return false;
  return !(isalpha(*a) || isalpha(*b));
}
Abstraction вне форума Ответить с цитированием
Старый 16.11.2012, 15:51   #3
zmey1
Пользователь
 
Регистрация: 15.08.2011
Сообщений: 30
По умолчанию

Это мне понятно.
Я не пойму как запихнуть все слова из массива строки в массив указателей, чтобы в одном элементе массива указателей было слово и к нему можно было обратиться через первый символ, *name[1]+0 например.

char *name[]={"fsdf","fgh"};

Вот на подобии такой операции, только меня интересует динамическое присваивание нового элемента с адресами на символы нового слова.
На уровне инициализации мне не подходит.

Последний раз редактировалось zmey1; 16.11.2012 в 16:32.
zmey1 вне форума Ответить с цитированием
Старый 16.11.2012, 16:24   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Можно.
Код:
char** words = new char*[MAX_WORDS];
//...
words[i] = new char[wordLength];
//...
Но не нужно. Чем Вам не нравится идея считать указатель на начало слова - самим словом?
Код:
char inputString[MAX_LENGTH];
char* words[MAX_WORDS];
for(int wordStart = 0, wordNum=0; inputString[wordStart] != '\0'; wordStart = NextWord(inputString, wordStart), ++wordNum)
  words[wordNum] = &inputString[wordStart];
Abstraction вне форума Ответить с цитированием
Старый 16.11.2012, 16:44   #5
zmey1
Пользователь
 
Регистрация: 15.08.2011
Сообщений: 30
По умолчанию

Мне Ваша идея очень как раз нравится.
Вот только на входе я имею строковый массив с кучей слов через пробел и только в конце массива стоит символ окончания строки.

Как мне обращаться к словам по адресу первого символа, когда первым он считается в начале массива и последним в конце строки, а не в конце слова.
Мне только нужно, как то разделить целый строчный массив на отдельные слова... И обращаться ко всем словам не 0,1,2,3,4,5, а 0,1,2,3; 0,1,2,3,4 итд...

Как это можно сделать?
zmey1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
С++ строковые массивы,неверная работа функции artpro Помощь студентам 0 06.01.2012 13:26
массивы и строковые данные radiokarazinec Общие вопросы Delphi 13 23.02.2011 05:47
Строковые массивы vanilla_bear Помощь студентам 2 25.12.2009 20:53
Pascal: массивы и строковые величины. Требуется помощь. pANd4 Помощь студентам 7 17.04.2009 15:28