Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Строки в СИ Добавлено: 13.01.07 13:59  

Автор вопроса:  Цивильный
Мужики, подскажите кто-нибудь, что здесь не правильно?
Нужно удалить группы пробелов (если таковые имеются), которыми эта строка начинается и заканчивается, а также заменить каждую внутреннюю группу пробелов одним пробелом.


#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();
}

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #1
Добавлено: 13.01.07 14:07
String.Trim
#using <mscorlib.dll>

using namespace System;

String* MakeArray()[]
{
   String* arr[] = {S"  please    ", S"  tell    ", S"  me    ", S"  about    ", S"  yourself    "};
   return arr;
}

void main()
{

   String* temp[] = MakeArray();

   Console::WriteLine(S"Concatenating the inital values in the array, we get the string:";);
   Console::WriteLine(S"'{0}'\n", String::Concat(temp));

   // trim whitespace from both ends of the elements
   for (int i = 0; i < temp->Length; i++)
      temp->Item[i] = temp[i]->Trim();

   Console::WriteLine(S"Concatenating the trimmed values in the array, we get the string:";);
   Console::WriteLine(S"'{0}'", String::Concat(temp));

   // reset the array
   temp = MakeArray();

   // trim the start of the elements-> Passing 0 trims whitespace only
   for (int i = 0; i < temp->Length; i++)
      temp->Item[i] = temp[i]->TrimStart(0);

   Console::WriteLine(S"Concatenating the start-trimmed values in the array, we get the string:";);
   Console::WriteLine(S"'{0}'\n", String::Concat(temp));

   // reset the array
   temp = MakeArray();

   // trim the end of the elements-> Passing 0 trims whitespace only
   for (int i = 0; i < temp->Length; i++)
      temp->Item[i] = temp[i]->TrimEnd(0);

   Console::WriteLine(S"Concatenating the end-trimmed values in the array, we get the string:";);
   Console::WriteLine(S"'{0}'", String::Concat(temp));
}


String.Replace
#using <mscorlib.dll>

using namespace System;

    void main()
    {
        String* errString = S"This docment uses 3 other docments to docment the docmentation";
 
        Console::WriteLine(S"The original string is:\n'{0}'\n", errString);

        // Correct the spelling of S"document".

        String* correctString = errString->Replace(S"docment", S"document";);

        Console::WriteLine(S"After correcting the string, the result is:\n'{0}'",
                correctString);
    }


--
http://kbyte.ru
http://blogs.kbyte.ru/Aleksey/Home.aspx

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 13.01.07 17:09
/*
Задание: Удалить в тексте лишние пробелы

  Реализация функции Replace !
  
*/

#include <windows.h>
    #include <iostream.h>
    
char* replace ( char* lpString, char* lpMatch, char* lpReplace )
{
    int     match_count=0;
    int     str_len=0;
    int     match_len=0;
    int     repl_len=0;
    int     required;
    char*   pOut;
    char*   pSrc;
    char*   output;
    int     i=0;
     
    while ( lpString[str_len] ) str_len++;      //длина строки
    if ( !str_len ) return 0;
    while ( lpMatch[match_len] ) match_len++;   //длина lpMatch      
    if ( !match_len ) return 0;
    while ( lpReplace[repl_len] ) repl_len++;   //длина lpReplace

    pSrc = lpString;
    while ( pSrc[0] )                           //подсчёт кол-ва вхождений lpMatch в lpString
    {
        i=0;
        while ( pSrc[i] && (pSrc[i]==lpMatch[i];) ) i++;
        if ( i == match_len )
        {
            match_count++;
            pSrc += i;
        }
        else pSrc++;
    }

    if ( ! match_count ) return 0;
     
    required = str_len - ((match_len- repl_len)*match_count);   //длина новой строки

    if ( 0 == (output = new char[required+1];) ) return 0;       //и получение памяти под неё
     
    pOut = output;
    pSrc = lpString;
     
    while ( pSrc[0] )                       //поиск фрагментов и замена на новые
    {
     if ( pSrc[0] != lpMatch[0] )        //копируем символы не подлежащие замене, в вых.строку
     {
     pOut[0] = pSrc[0];
     pOut++; pSrc++;
     }
     else                                //если встретился символ, с которого начинается lpMatch
     {
     i = 0;
     while ( pSrc[i] && (pSrc[i]==lpMatch[i];) ) i++;
            if ( i == match_len )           //и lpMatch найдена целиком
            {
             for (i=0; i<repl_len; i++)  //вместо неё в вых. строку копируем lpReplace
                    pOut[i] = lpReplace[i];
                pOut += i; pSrc += match_len;
            }
            else                            //если совпал только первый символ lpMatch, продолжаем
            {
                pOut[0] = pSrc[0];
                pOut++; pSrc++;
            }
             
     }                                   //копировать старую строку в вых. строку
    }
    pOut[0]=0;                              //завершаем вых. строку нулём
     
    return output;
     
}



void main(){
    char    String[128];
    char    Match[]="  ";
    char    Replace[]=" ";
    char*   new_string;

    cout << "Input string: \n";
    cin.getline (String,128);

    char*   temp = new char[strlen(String) +1];
     
    strcpy (temp, String);

    while ( (new_string = replace (temp, Match, Replace)) != 0 )
    {
        strcpy ( temp, new_string );
        delete[] new_string ;
    }

    cout << "\n" << temp;
    cin.get();
}

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам