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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2010, 23:20   #31
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Вы на C++ или на C пишете ?
Если первое, то используйте std::string ибо оно надежнее, удобнее и проще. Используйте стандартную бибилиотеку C++, ибо оно высокоуровней, проще и надежней. И не страдайте ерундой с char*.
Если же на С, то изучите работу с этими самыми char* строками, в частности функции стандартной библиотеки, от и до, так как в будущем проблем с ними будет еще больше.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 13.05.2010, 06:33   #32
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

Цитата:
Вы на C++ или на C пишете ?
На C++
Цитата:
std::string
Можно подробние если не трудно что? где? почем?
ReaktiV вне форума Ответить с цитированием
Старый 13.05.2010, 07:19   #33
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Ну вот и используйте библиотеку C++, а не C.
Смотрите моё решение.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 13.05.2010, 07:42   #34
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Можно подробние если не трудно что? где? почем?
std::string говорит о том что тип строки берется из пространства имен std.
Есть в Си такая бяка как пространство имен. Каждое пространство содержит свои описания типов и прочего. например банальное:
Код:
#include <string>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
	string s="sfafsdf";
	cout<<s;
	getchar();
	return 0;
}
Не прокатит. Компилятор скажет
Цитата:
Error 1 error C2065: 'string' : undeclared identifier
А все потому что этот тип и класс cout описан в пространстве имен std
Цитата:
_STD_BEGIN
Который описан так:
Цитата:
#define _STD_BEGIN namespace std {
#define _STD_END }
Это является распространенной ошибкой тех кто редко на Си пишет. Не указывая пространство имен компилятору тот не найдет нужные типы

Вот если переписать пример так:
Код:
	std::string s="sfafsdf";
	std::cout<<s;
Или дописать using namespace std;
то все отлично заработает. Компилятор надыбает в пространстве имен std тип строки и cout.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2010, 08:40   #35
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Читайте книжки по C++ (например, Страуструпа). Там все написано.
И гугль в помощь.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 13.05.2010, 19:26   #36
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

На до ещё то что знаю развить, а вот когда приноровлюсь шагну на новую ступень, а ту так я могу много не понять.
ReaktiV вне форума Ответить с цитированием
Старый 15.05.2010, 19:40   #37
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

Итак, ещё раз задание
Цитата:
Дана строка, оканчивающаяся точкой, содержащая слова, разделенные между собой пробелами. Вывести на экран слова без повторяющихся букв, которые отличны от последнего.
вот ввод
Код:
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <windows.h>
#include <string.h>

using namespace std;

int main(int argc, char *argv[])
{
    int i,j,k=0,m,n;
    char str[256];
    const int len=256;
    char line[len], str1[256], nulek[256];
    nulek[0] = '\0';
    CharToOem("введите строку и поставьте точку\n", str);
    cout<< str;
    cin.getline(str1,len);
    cout<<str1<<"\n";    //это для проверки
    
   m=strlen(str1);   
    cout<<m;        //это для проверки
    j=0;
    for(i=0;i<m-1;i++)
    {
      if (str1[i] != ' ') {line[j]=str1[i]; j++;} 
      else j=0; 
    } 
    line[j]='\0'; 
    cout<<line;   //это для проверки
это сравнение: задумка была такая сравнивать буквы в слове и сразу буквы в последнем слове, но не работает. ТОрмозит и всё на этом месте.
Код:
 do
    {
    for(i=0; i<m; i++)
    for(j=0; j<m; j++)
    if(str1[i]==str1[j]) k=1;
    if(!k)
      { k=0;
        for (i=0; i<n; i++)
         if(str1[i]!=line[i]) k=1;
         if(k) cout<<str1;
         
       }   
  }while(str1[i]!='.');
    

    system("PAUSE");
    return EXIT_SUCCESS;
}
ReaktiV вне форума Ответить с цитированием
Старый 18.05.2010, 19:08   #38
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

Не могу найти глюк
Код:
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <windows.h>
#include <string.h>

using namespace std;
int k=0;
void check(char b[256])
        {int i, j, n=strlen(b);
        for(i=0;i<n;i++)
        for(j=i+1;j<n;j++)
        if(b[i]==b[j])k=1;}
int main(int argc, char *argv[])
{
    int i,j,m,n;
    char str[256];
    const int len=256;
    char line[len], str1[256], nulek[256];
    nulek[0] = '\0';
    CharToOem("введите строку и поставьте точку\n", str);
    cout<< str;
    cin.getline(str,len);
    cout<<str;
    do
        {j=0;
        do
            {line[j]=str[i];
            j++;i++;
            }
        while(i+1!=' ');
        }
    while(line[j-1]!='.');
    strcpy(str1,line);
    m=strlen(str1);
    str1[m-1]=' ';
    do
        {j=0;
            do
            {   
                line[j]=str[i];
                j++;
                i++;
            }
            while(i+1!=' ');
            check(line);
            line[j]=' ';
        if((k==1)&&(strcmp(line,str1)!=0))
        cout<<line;
        }
        while(str[i]!='.');
        

    system("PAUSE");
    return EXIT_SUCCESS;
}

Последний раз редактировалось ReaktiV; 18.05.2010 в 19:21.
ReaktiV вне форума Ответить с цитированием
Старый 19.05.2010, 08:39   #39
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Держи код.
Если условия были те же
Цитата:
Дана строка, оканчивающаяся точкой, содержащая слова, разделенные между собой пробелами. Вывести на экран слова без повторяющихся букв, которые отличны от последнего.
тогда работает, правда на мелкие ошибки, типа если в конце пробел или в начале или всего одно слово из одной буквы, не проверял
Код:
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <windows.h>
#include <string.h>

using namespace std;
int k=0;
void check(char b[256])
        {int i, j, n=strlen(b);
        for(i=0;i<n;i++)
        for(j=i+1;j<n;j++)
        if(b[i]==b[j])k=1;}
int main(int argc, char *argv[])
{
    int i=0,j,k=0,m,n;
    char str[256];
    const int len=256;
    char line[len], str1[256], nulek[256];
	char words[len][len]; //сюда запишутся все слова
    nulek[0] = '\0';
    printf("Vvedite stroku\n");
    cin.getline(str,len);
    cout<<str;
    while(str[i]!='.' && i<strlen(str)) //циклы для разбиения предложения на слова, которые запишутся в words
        {j=0;
         while(str[i]!=' ' && str[i]!='.' && i<strlen(str))
            {words[k][j]=str[i];
             j++;i++;
            }
		 words[k][j]='\0';
		 while(i<strlen(str) && str[i]==' ') i++; //вдруг несколько пробелов?..
		 k++;
        }
    i=0;
	bool pr; //пригодится ;)
	while(i<k) //сравнение слов с последним и проверка символов
        {
		 if (strcmp(words[i],words[k-1])) //если строки не равны
		    {pr=true; //если останется true тогда нет одинаковых букв
             for(j=0;(j<strlen(words[i])-1) && (pr);j++)
              for (int l=j+1; l<strlen(words[i]); l++)
			    if (words[i][j]==words[i][l])
				{pr=false;     //упс...нашлись одинаковые
			     break;
			    }
			 if (pr) cout <<endl<<words[i];
			}		 
		 i++; //счетчик слов
        }

    system("PAUSE");
    return EXIT_SUCCESS;
}
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 17.10.2011, 09:28   #40
Sobaka_ru
Пользователь
 
Регистрация: 09.12.2010
Сообщений: 44
По умолчанию

Цитата:
Сообщение от ReaktiV Посмотреть сообщение
Нарыл в нете такую задачу. Может кто-нибудь показать пример написания на C++?
У меня почти такая же задачу, но я хз как её сделать... там надо точку убрать...
Цитата:
Дана строка,состоящая из русских слов,разделенными пробелами(одним или несколькими).Вывести строку,содержащую эти же слова,разделенные одним символом "." (точка). В конце строки точку не ставить
Вот кароче так решил...
Код:
int main()
{
    char s[100];
    printf("Введите строку \n");
    gets( s );
    int len = strlen( s );
    for( int i = 0; i < len; i++ )
    {
        if( s[i] == ' ' )
        {
            printf( "." );
            while( s[i] == ' ' )
                i++;
        }
        printf( "%c", s[i] );
    }
getch();
    return 0;
}

Последний раз редактировалось Sobaka_ru; 17.10.2011 в 09:56.
Sobaka_ru вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Удаление элементов строки s2 из строки s1 Ueshua Общие вопросы C/C++ 4 20.12.2009 13:06
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10
Строки. Как вывести часть строки? Anfall Общие вопросы Delphi 7 26.02.2009 09:10
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27