Страница: 1 |
Страница: 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-сайт:
Профиль | | #1
Добавлено: 13.01.07 14:07
String.Trim
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 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();
}