Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> СТРОКИ В СИ в среде BC 3.1 
:(
    Опции темы
Цивильный
Дата 20.1.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.1.2007

Репутация: -2
Всего: нет



Код

Привет, друзья. Снова меня мучает маленькая проблема.
 Дана строка. Преобразовать ее следующим образом: удалить группы пробелов (если таковые имеются), которыми эта строка начинается и заканчивается, а также заменить каждую внутреннюю группу пробелов одним пробелом.
Я делаю так, программа работает, но пробелы нихрена не удаляются и не заменяются:

#include <stdio.h> 
#include <conio.h>
#include <string.h>

void main(void)
{
 int i,j,k,len;
 char s[200],s2[200];
 clrscr();
 printf("Enter string: ");
 gets(s);
 len=strlen(s);
{
 for(i=0;i<len;i++)
     if (s[i]!=' ')break;
}
 while (i<len)
    {
    {
   for (i;i<len;i++)
     {
         if (s[i]!=' ')
      {
       s2[j]=s[i]; 
       j++;
      }
     else 
      {
     s2[j]=' ';
       break;
    }
    }
    }
    {
    for (i;i<len;i++)
    {
    if (s[i]==' ') continue;
    else break;
    }
  }
  }
 s2[j]='\0';
 puts(s);

 printf("\nEnter any key");
 getch();
}
 smile

Добавлено @ 17:10 
Подскажите пожалуйста, что здесь не правильно? ПОЖАЛУЙСТА!!!!!!!!!

Добавлено @ 17:10 
Очень срочно надо!!!
PM MAIL   Вверх
Rodman
Дата 20.1.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



Код

#include <stdio.h> 
#include <conio.h>
#include <string.h>
void main(void)
{
 int i,j,k,len;
 char s[200],s2[200];
 clrscr();
 printf("Enter string: ");
 gets(s);
 len=strlen(s);
 for(i=0;i<len-1;i++)
 {
     if ((s[i]==" ")&&(s[i+1]==" "))
           //не помню Delete как написать, возможно так
          Delete(s,i+1,1);
     if(s[i]=='\0')
         break;
 }
 puts(s);
 printf("\nEnter any key");
 getch();
}


мне кажется так, но я не проверял...

Добавлено @ 17:20 
но если Delete нет то
Код

#include <stdio.h> 
#include <conio.h>
#include <string.h>
void main(void)
{
 int i,j,k,len;
 char s[200],s2[200];
 clrscr();
 printf("Enter string: ");
 gets(s);
 len=strlen(s);
 for(i=0;i<len-1;i++)
 {
     if ((s[i]==" ")&&(s[i+1]==" "))
      {
           for (j=i;j<len-1;j++)
                s[i+j]=s[i+j+1];
          s[i+j+1]=" ";
       }
     if(s[i]=='\0')
         break;
 }
 puts(s);
 printf("\nEnter any key");
 getch();
}

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Цивильный
Дата 20.1.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.1.2007

Репутация: -2
Всего: нет



что-то не работает.
Пишет cannot convert 'char* to char'

Добавлено @ 17:31 
Я изменил   " " на ' ' получилось также как у меня было в первый раз, работает, но пробелы не удаляются и не заменяются, я в панике

Добавлено @ 17:32 
Я В ПАНИКЕ, ЧТО ДЕЛАТЬ????????????????????????????????????????? smile 
PM MAIL   Вверх
bsa
Дата 20.1.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Код
#include <stdio.h>
#include <string.h>
main()
{
    char s[200];
    int i, j, len;
    printf("Enter string: ");
    fgets(s, 200, stdin);
    len = strlen(s);
    //убираем пробелы в начале
    for(i = 0; (i < len) && (s[i] == ' '); ++i);

    if (i) {
        len -= i;
        strcpy(s, s+i);
    }
    //убираем лишние пробелы в середине
    i = 0;
    while(i < len) {
        for(; (i < len) && (s[i] != ' '); ++i);
        if (s[i] == ' ') {
            for(j = i+1; (j < len) && (s[j] == ' '); ++j);
            if (j - i > 1) {
                strcpy(s + i, s + j - 1);
                len = strlen(s);
            }
        }
    }
    //убираем пробел в конце, если есть
    if (s[len-1] == ' ')
        s[len-1] = '\0';
    printf("result: \"%s\"\n", s);
}
Код не проверял. Думаю, что в таком виде он не работает
PM   Вверх
Цивильный
Дата 20.1.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.1.2007

Репутация: -2
Всего: нет



Этот код удаляет лишь первые пробелы, если после первого слова имеется пробел курсор перескакивает на следующую строку и нихрена не происходит. smile  smile  smile  smile  smile  smile  smile  smile

Добавлено @ 17:43 
что делать??? smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile 
PM MAIL   Вверх
Sartorius
Дата 20.1.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



Код

#include <stdio.h>
#include <sstream>
#include <string.h>
using namespace std;
int main()
{
    stringstream str;
    char szStr[] ="  dfdf df df    df  ";
    int l = 0;

    str << (char*)szStr;
    do{
        str >> szStr + l;
        l = strlen(szStr);
        szStr[l] = ' ';
        l++;
    } while(!str.eof());

    szStr[l - 2] = 0;
    printf("%s\n", szStr);
    return 0;
}


Это сообщение отредактировал(а) Sartorius - 20.1.2007, 17:49
PM MAIL ICQ   Вверх
Цивильный
Дата 20.1.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.1.2007

Репутация: -2
Всего: нет



ВЫ ГДЕ? ПОЖАЛУЙСТА ПОМОГИТЕ!!!!!!!!!!!!!!!!!!!!!  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile 
PM MAIL   Вверх
Anikmar
Дата 20.1.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Попробуй такую функцию:
Код

void LeftRightTrim(char *Source, char*Target)
{
    int Start=0;
    int EndPos;
    int i = 0;

    Target[0] = 0;
    EndPos = strlen(Source);
    if (EndPos == 0) return;

    while(Source[Start] == ' ') Start++;
    if (Start >= EndPos) return;
    EndPos--;
    while(Source[EndPos] == ' ') EndPos--;

    while(Start<=EndPos) Target[i++] = Source[Start++];

    Target[i] = 0;

    return;
}

PM MAIL ICQ   Вверх
Цивильный
Дата 20.1.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.1.2007

Репутация: -2
Всего: нет



Все не то!!! Где правильный ответ?Где он.  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile

Добавлено @ 17:54 
 smile  Стимулятор - 50WMR. Срочно нужен правильный код!!!
PM MAIL   Вверх
Anikmar
Дата 20.1.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата

 Дана строка. Преобразовать ее следующим образом: удалить группы пробелов (если таковые имеются), которыми эта строка начинается и заканчивается, а также заменить каждую внутреннюю группу пробелов одним пробелом.


Слишком длинную строку забил.
Моя функция удаляет начальные и конечные пробелы.
Чтобы удалить в серединке - немного подправить всего лишь заключительный цикл, неужели никак самому не сделать?
PM MAIL ICQ   Вверх
nickless
Дата 20.1.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(Цивильный @ 20.1.2007,  16:52)
Все не то!!! Где правильный ответ?Где он.  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile

Цивильный,
ты бы не кричал, а сел, да немного поднапряг мозги, тебе уже кучу ответов понадовали smile 

А если хочешь, чтоб за тебя писали код, то тебе в Центр помощи


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
bsa
Дата 20.1.2007, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Он просто ждет, когда мы ему готовенькое дадим.
PM   Вверх
Anikmar
Дата 20.1.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Изучай!  smile 
Код

void LeftRightTrim(char *Source, char*Target)
{
    int Start=0;
    int EndPos;
    int i = 0;
    char Symb;
    bool Flag;

    Target[0] = 0;
    EndPos = strlen(Source);
    if (EndPos == 0) return;

    while(Source[Start] == ' ') Start++;
    if (Start >= EndPos) return;
    EndPos--;
    while(Source[EndPos] == ' ') EndPos--;

    Flag = false;
    while(Start<=EndPos)
    {
        Symb = Source[Start++];
        if ((Symb == ' ')&&(Flag)) continue;
        Target[i++] = Symb;
        Flag = (Symb == ' ');
    }



    Target[i] = 0;

    return;
}


PM MAIL ICQ   Вверх
Цивильный
Дата 20.1.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.1.2007

Репутация: -2
Всего: нет



КАКИЕ ЖЕ ВЫ ЗЛЫЕ smile 
PM MAIL   Вверх
Anikmar
Дата 20.1.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Цивильный @  20.1.2007,  18:02 Найти цитируемый пост)
КАКИЕ ЖЕ ВЫ ЗЛЫЕ   

Это вместо спасибо?!

Я ему готовую функцию сляпал - а он нам фигвамы рисует!
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0634 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.