Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Работа со строками в C++

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Работа со строками в C++
Имя
Сообщение << Старые топики   Новые топики >>
Работа со строками в C++ - 2006-11-13 18:25:46.223333   
De}{is

Сообщений: 137
Оценки: 0
Присоединился: 2005-11-22 11:21:42
Недавно начал разбираться с c/c++ и столкнулся с такой проблемой: есть в этом языке нормальные строковые переменные (типа string в паскале) а то c char'ом работать совершенно невыносимо?
Post #: 1
RE: Работа со строками в C++ - 2006-11-13 18:35:55.676666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
в C, строка – это просто массив char'ов. а чем неудобно? ты б примерчик привёл, а я бы показал что в цэ это, как минимум, не сильно сложнее чем в паскале, а то и проще.

в C++, есть тип string, но это уже резко приплюснутый ц, придётся также иметь дело с cin, cout забивая на FILE*. И, подчастую, забивая на указатели работать со ссылками.
Post #: 2
RE: Работа со строками в C++ - 2006-11-13 19:39:34.863333   
SantaS

Сообщений: 99
Оценки: 0
Присоединился: 2006-09-23 21:49:06.040000
rgo а чем тебе не нравится cin, cout. ИМХО очень удобно, практично. А вот без ссылок, да хреного!
Post #: 3
RE: Работа со строками в C++ - 2006-11-13 20:14:12.973333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: SantaS

rgo а чем тебе не нравится cin, cout. ИМХО очень удобно, практично.

нну дык я не спорю что удобно… хотя… перепеши следующий код используя cout, и поймёшь, что прав ты лишь отчасти: int i; for (i = -10; i &lt;= 10; i ++) { printf ("%+4.2i |%6.3f\n", i, 1./(i*i + .5)); }
но, я, на самом деле не о том, хотел сказать. моё имхо, что неплохо было бы сначала с цэ разобраться, хотя бы в первом приближении, и только потом заморачиваться с плюсами. а если вместо char* использовать string, то без плюсов далеко не уедешь.
Post #: 4
RE: Работа со строками в C++ - 2006-11-13 21:19:30.443333   
VDShark

Сообщений: 287
Оценки: 0
Присоединился: 2006-09-23 11:36:06.240000
А чем вам массив символов (char в смысле:D) не угодил? По моему очень даж удобно, и никаких проблем при использовании не возникает…. у меня по крайней мере)
Post #: 5
RE: Работа со строками в C++ - 2006-11-15 21:24:31.073333   
De}{is

Сообщений: 137
Оценки: 0
Присоединился: 2005-11-22 11:21:42
мне нужно организовать ввод с клавиатуры строки, длинна которой не известна, я пишу так

char *s;
cin >> s;

и во время выполнения после нажатия Enter программа вылетает, в чем ошибка и как должно быть?

и ещё при попытке сравнивать массивы char:

char s1[256], s2[256];
s1 = "a";
s2 = "b";
if (s1 < s1) cout << "s1 < s2";

программа работет неправильно (срока , "s1 < s2" не выводится) почему?
Post #: 6
RE: Работа со строками в C++ - 2006-11-15 22:20:31.573333   
Келер

Сообщений: 32
Оценки: 0
Присоединился: 2006-11-13 19:35:57.113333
#include<iostream.h>
void main()
{
    char s1[256], s2[256];
    s1[0] = 'a';
    s2[0] = 'b';
    if (s1[0] < s2[0]) cout << "s1 < s2\n";
}

А как организовать ввод строки, длина которой не известна не знаю, сам только недавно начал учить c++
Post #: 7
RE: Работа со строками в C++ - 2006-11-15 22:43:55.166666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: De}{is

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

char *s;
cin &gt;&gt; s;

и во время выполнения после нажатия Enter программа вылетает, в чем ошибка и как должно быть?

и будет вылетать, ибо s объявлена как указатель и в ней должен лежать адрес на кусок памяти где будет храниться строка. Но ты ведь никак не инициализируешь s, и там лежит хлам. Куда записывается введённая строка?

а насчёт неизвестности размера… тут либо использовать не char*, а c++'овый string – там память будет выделяться динамически, либо писать самостоятельно всё выделение памяти, либо искать в C'шных либах функцию которая будет это делать. В gnu libc есть, причём как самостоятельные функции так и флаги к %s в scanf'е, но ты, как я предполагаю не glibc используешь?
короче проще сделать так, как предложил предыдущий оратор.
хотя полкилобайта из стека под какие-то строчки – это не есть гуд. ;)

quote:

и ещё при попытке сравнивать массивы char:

char s1[256], s2[256];
s1 = "a";
s2 = "b";
if (s1 &lt; s1) cout &lt;&lt; "s1 &lt; s2";

программа работет неправильно (срока , "s1 &lt; s2" не выводится) почему?

=)
программа работает правильно. просто ты неправильно понимаешь то, как она работает. s1, s2 – это массивы, когда ты пишешь `s1 < s2' ты сравниваешь адреса этих массивов. для сравнения строк надо использовать функцию strcmp.
Ну или в качестве варианта, опять же, перейти от char* к string.
Post #: 8
RE: Работа со строками в C++ - 2006-12-11 12:13:10.436666   
Келер

Сообщений: 32
Оценки: 0
Присоединился: 2006-11-13 19:35:57.113333
Как работать со string используя cin cout?
Post #: 9
RE: Работа со строками в C++ - 2006-12-11 12:52:50.030000   
__Andy__

Сообщений: 86
Оценки: 0
Присоединился: 2006-11-29 13:01:54.263333
string s(""); cout &lt;&lt; "Enter your string:\n"; cin &gt;&gt; s; //some operations with your string cout &lt;&lt; "Modifyed string: " &lt;&lt; s &lt;&lt; endl;
Post #: 10
RE: Работа со строками в C++ - 2006-12-11 16:14:43.560000   
Келер

Сообщений: 32
Оценки: 0
Присоединился: 2006-11-13 19:35:57.113333
Что-то не выходит, пишу следующее:

#include <string>
#include <iostream.h>
void main()
{
    string s("");
    cout << "Enter your string:\n";
    cin >> s;
    
    //some operations with your string
   
    cout << "Modifyed string: " << s << endl;
}

Ошибки следующие:

——————–Configuration: string - Win32 Debug——————–
Compiling…
string.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\string\string.cpp(5) : error C2065: 'string' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\MyProjects\string\string.cpp(5) : error C2146: syntax error : missing ';' before identifier 's'
C:\Program Files\Microsoft Visual Studio\MyProjects\string\string.cpp(5) : error C2065: 's' : undeclared identifier
Error executing cl.exe.

string.exe - 3 error(s), 0 warning(s)

Post #: 11
RE: Работа со строками в C++ - 2006-12-11 21:31:24.580000   
De}{is

Сообщений: 137
Оценки: 0
Присоединился: 2005-11-22 11:21:42
чем ты компилируешь?
у меня на билдере все работает
Post #: 12
RE: Работа со строками в C++ - 2006-12-12 01:45:46.640000   
__Andy__

Сообщений: 86
Оценки: 0
Присоединился: 2006-11-29 13:01:54.263333
#include &lt;string&gt; #include &lt;iostream&gt; using namespace std; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!! void main() { string s(""); cout &lt;&lt; "Enter your string:\n"; cin &gt;&gt; s; //some operations with your string cout &lt;&lt; "Modifyed string: " &lt;&lt; s &lt;&lt; endl; }
Post #: 13
RE: Работа со строками в C++ - 2006-12-12 22:01:44.016666   
Келер

Сообщений: 32
Оценки: 0
Присоединился: 2006-11-13 19:35:57.113333
Компилирую VC++ 6.0
2 __Andy__&nbsp; :
Спасибо теперь всё работает, а не мог бы ты пояснить что значит
quote:

using namespace std;
, а то не хочется каждый раз переписывать непонимая что.
Post #: 14
RE: Работа со строками в C++ - 2006-12-12 22:49:13.300000   
__Andy__

Сообщений: 86
Оценки: 0
Присоединился: 2006-11-29 13:01:54.263333
std - пространство имен из стандартной библиотеки….
Учи матчасть..
Post #: 15
RE: Работа со строками в C++ - 2006-12-12 23:32:08.236666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: Келер

2 __Andy__ :
Спасибо теперь всё работает, а не мог бы ты пояснить что значит
quote:

using namespace std;
, а то не хочется каждый раз переписывать непонимая что.

это чтоб писать вместо:std::cout &lt;&lt; "hello world" &lt;&lt; std::endl;по-простомуcout &lt;&lt; "hello world" &lt;&lt; endl;
Post #: 16
RE: Работа со строками в C++ - 2006-12-13 02:23:36.533333   
KIsp

Сообщений: 203
Оценки: 0
Присоединился: 2006-09-10 15:22:14
using namespace std - (по русски)это типо юзать переменные из пространства имен под названием std.
Post #: 17
RE: Работа со строками в C++ - 2006-12-13 02:35:12.376666   
Diabolus

Сообщений: 127
Оценки: 0
Присоединился: 2006-11-18 05:35:27.343333
quote:

ORIGINAL: De}{is

чем ты компилируешь?
у меня на билдере все работает

меня поразил сей вопрос :)
C:\Program Files\Microsoft Visual Studio\MyProjects\string\string.cpp(5) : error C2065: 'string' : undeclared identifier
вряд ли ведь он установил билдер ф папку Microsoft Visual Studio, ога? :)
Post #: 18
RE: Работа со строками в C++ - 2006-12-13 16:46:04.330000   
Келер

Сообщений: 32
Оценки: 0
Присоединился: 2006-11-13 19:35:57.113333
Спасибо что разъяснили.
Post #: 19
RE: Работа со строками в C++ - 2006-12-19 16:21:41.340000   
GorluM

Сообщений: 312
Оценки: 0
Присоединился: 2004-04-07 23:41:00
В char'ах вся прелесть.
А все эти стринги - для ламосов и офисного планктона.
Post #: 20
RE: Работа со строками в C++ - 2006-12-20 01:11:52.590000   
__Andy__

Сообщений: 86
Оценки: 0
Присоединился: 2006-11-29 13:01:54.263333
2 GorluM, геморно, имхо…
кроме того, std::string - это ж часть стандарта.. Что тут плохого??
Post #: 21
RE: Работа со строками в C++ - 2006-12-20 16:44:17.116666   
GorluM

Сообщений: 312
Оценки: 0
Присоединился: 2004-04-07 23:41:00
чего геморного то? я привык.
а std::string не юзаю, ибо я хз, чего там компилятору взбредет в мой код вставить
в моей программе толькой мой код. я придерживаюсь этого принципе при разработке программ, манипулирующих системой
Post #: 22
RE: Работа со строками в C++ - 2006-12-20 18:24:20.710000   
__Andy__

Сообщений: 86
Оценки: 0
Присоединился: 2006-11-29 13:01:54.263333
quote:


std::string не юзаю, ибо я хз, чего там компилятору взбредет в мой код вставить

компилятор будет действовать согласно стандарту С++ =))
Post #: 23
RE: Работа со строками в C++ - 2006-12-20 21:49:59.070000   
GorluM

Сообщений: 312
Оценки: 0
Присоединился: 2004-04-07 23:41:00
Стандарт в данном случае трактуется разными компиляторами по-разному. Но смысл не в этом, а в том, что я абсолютно точно представляю себе как будет в скомпилированном виде выглядеть:

char buffer[128]; char *s1 = "hello"; char *s2 = "world"; lstrcpy(buffer,s1); lstrcat(buffer,s2);Обе строки в секцию данных. Буффер выделяется из стека. Обычный запуск обоих функций.

А если бы я написал:

std::string buffer; buffer = "hello"; buffer += "world";Чего в коде вылезет? Каждый компилятор подумаем по-свойму. Кто-то, мож, в конечном все упростит до запуска виндовых строковых lstr, а кто-то влепет миллион методов класса, благодаря чему программа нихренова так разрастется.

Разве стандарт определяет, какой код должен получаться? А нихрена. Стандарт определяет как можно писать программы, а не то как они впоследствии будут выглядеть.
Post #: 24
RE: Работа со строками в C++ - 2006-12-21 13:03:27.523333   
__Andy__

Сообщений: 86
Оценки: 0
Присоединился: 2006-11-29 13:01:54.263333
quote:


lstrcpy(buffer,s1); lstrcat(buffer,s2);

А разве их реализация не зависит от компилятора?)))) (в общем случае)
Post #: 25
RE: Работа со строками в C++ - 2006-12-22 00:18:54.493333   
GorluM

Сообщений: 312
Оценки: 0
Присоединился: 2004-04-07 23:41:00
quote:

А разве их реализация не зависит от компилятора?)))) (в общем случае)


это winapi
Post #: 26
RE: Работа со строками в C++ - 2006-12-22 01:32:38.696666   
__Andy__

Сообщений: 86
Оценки: 0
Присоединился: 2006-11-29 13:01:54.263333
блин… точно…
Вот, что значит, лечь в 4 утра))))

И вообще…
глупый спор какой-то получается - C vs C++
Post #: 27
RE: Работа со строками в C++ - 2007-10-25 21:14:49.050000   
AchtungPartizanen

Сообщений: 38
Оценки: 0
Присоединился: 2007-10-25 20:54:58.030000
Я у вас тут недавно, и то потому что помощи решил попросить…
Надо сделать лабу по строкам. Павловская не очень помогает…
Короче: с клавы вводится предложение. Есть две подстроки: одна из 2 букв, вторафя из 3. Нужно найти во введенном предложении все слова, содержащие хотя бы одну из подстрок, и вывести ее.
Я тут уже много чего намудрил, код приложу…

Идея такая. Брать из предложения по одному слову (искать пробелы и отрезать по ним), искать в слове подстроки, если есть, то вывести слово, затем отрезать найденное слово от строки, и так в цикле пока длина строки не ноль. Но вот есть некоторые запары в связи с тем, что я плохо знаю функции языка…
#include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; void poisk(char predl[]); void main(void) { clrscr(); char predl[80]; cout &lt;&lt; "vvedyte predlogenie\n"; cin.get(predl,80); // predl[strlen(predl)] = '\0'; cout &lt;&lt; predl &lt;&lt; "\n"; poisk(predl); getch(); } //в этой функции я и осуществляю поиск void poisk(char predl[]) { char *ptr, c = ' '; //пробел char string[80], work[20]; //string - предложение, work - слово, с ним буду работать char isk1[] = "abc", isk2[] = "de" //подстроки, которые буду искать strncpy(string,predl,strlen(predl)); //копирую предложение в string, чтобы не трогать оригинальную строку int pos; //номер найденного пробела while (strlen(string)) //пока длина строки не ноль { ptr = strchr(string, c); //ищем пробел pos=ptr-string; //и записываем его номер strncpy (work,string,pos); //копируем слово (все, что до пробела) в work if (strstr(work,isk1)|strstr(work,isk2)) cout&lt;&lt;work&lt;&lt;"\n"; /*ищу подстроки в слове, если strstr не найдет, то возвратит &lt;NULL&gt;, если найдет, то возвращает строку от найденной подстроки до конца слова, но главное, что не нуль. Но тут не компилируется...*/ strncpy(string,string[pos+1],strlen(string)-pos); //пытаюсь отрезать проверенное слово от string. тоже пока не получается... } /* if (ptr) cout &lt;&lt; "The character \'" &lt;&lt; c &lt;&lt; "\' is at position: " &lt;&lt; pos &lt;&lt; "\n"; else cout &lt;&lt; "The character was not found\n";*/ }
Post #: 28
RE: Работа со строками в C++ - 2007-10-25 22:39:29.676666   
C_4

Сообщений: 46
Оценки: 0
Присоединился: 2007-07-20 13:53:35.103333
AchtungPartizanen а через чары сделать нельзя, лаба именно по работе со string'ами? Просто алгоритм тогда вроде бы несложный получается… мб я не так задачу поняла. Даже скорее всего не так поняла - такие вопросы:

quote:

Нужно найти во введенном предложении все слова, содержащие хотя бы одну из подстрок, и вывести ее.


В коде ты выводишь подстроку, которая встречается хотя бы в одном слове, и pos - по-видимому, это индекс пробела, где кончается слово?
quote:

pos=ptr-string; //и записываем его номер

А вот куда ты деваешь слова, в которых нашёл подстроку, я так и не поняла.

Я бы предложила такой алгоритм:
Заводим указатель, бегущий по предложению. Встречая пробел, отдельно запоминаем указатель на первый символ нового слова. Дальше если программа находит первую букву одной из подстрок, проверяем следующую и т.п. Если подстрока найдена - выводим на экран слово *или сохраняем в файл, или запоминаем позицию, что с ним там надо сделать* и продолжаем поиск.
Post #: 29
RE: Работа со строками в C++ - 2007-10-25 22:53:12.816666   
AchtungPartizanen

Сообщений: 38
Оценки: 0
Присоединился: 2007-10-25 20:54:58.030000

quote:

ORIGINAL: C_4

AchtungPartizanen а через чары сделать нельзя, лаба именно по работе со string'ами? Просто алгоритм тогда вроде бы несложный получается… мб я не так задачу поняла. Даже скорее всего не так поняла - такие вопросы:

Лаба именно по работе с чарами, стрингов я нигде не использую вообще. Так надо
quote:

quote:

Нужно найти во введенном предложении все слова, содержащие хотя бы одну из подстрок, и вывести ее.


В коде ты выводишь подстроку, которая встречается хотя бы в одном слове, и pos - по-видимому, это индекс пробела, где кончается слово?
quote:

pos=ptr-string; //и записываем его номер

А вот куда ты деваешь слова, в которых нашёл подстроку, я так и не поняла.

Вывожу на экран.
Там план такой: взял предложение, отрезал одно слово, проверил на предмет встречаемости заданных буквосочетаний, если есть, то выводим, если нет, то не выводим. Дальше отрезаем следующее слово, повторяем операции. И так до тех пор пока предложение не кончится
quote:


Я бы предложила такой алгоритм:
Заводим указатель, бегущий по предложению. Встречая пробел, отдельно запоминаем указатель на первый символ нового слова. Дальше если программа находит первую букву одной из подстрок, проверяем следующую и т.п. Если подстрока найдена - выводим на экран слово *или сохраняем в файл, или запоминаем позицию, что с ним там надо сделать* и продолжаем поиск.

Вот это не знаю. Если я не ошибаюсь, лаба по изучению функций работы со строками (а закавык много, например, strncpy не утруждает себя добавлением '\0' в конец создаваемой строки, и такие моменты надо специально контролировать). Так что не уверен, стоит ли делать так, как ты сказала…
Post #: 30
RE: Работа со строками в C++ - 2007-10-25 22:56:17.460000   
C_4

Сообщений: 46
Оценки: 0
Присоединился: 2007-07-20 13:53:35.103333
Суть задачи вроде бы стала ясна… но…

quote:

Так что не уверен, стоит ли делать так, как ты сказала…

Я тоже не уверена. Но с функциями работы со строками вряд ли помогу, чары обычно юзаю. Хотя мб на досуге попробую разобраться.
Post #: 31
RE: Работа со строками в C++ - 2007-10-25 23:02:45.780000   
jiraff

Сообщений: 64
Оценки: 0
Присоединился: 2007-10-21 02:05:50.850000
О, кстати.Заодно и йа спрошу.Какой оператор конкатенации в C++?В php это ".", в паскале и жабе это "+".А вот в C++ получается только при cout соеденять строки :-( ни точка, ни плюс не работают.Компилятор gcc…
Post #: 32
RE: Работа со строками в C++ - 2007-10-25 23:09:09.803333   
AchtungPartizanen

Сообщений: 38
Оценки: 0
Присоединился: 2007-10-25 20:54:58.030000
->jiraff: strcat попробуй…
->C_4: я ж говорю, что не использую стринг, я использую массив чар!
Где у меня написано string? У меня везде char[]!
Post #: 33
RE: Работа со строками в C++ - 2007-10-25 23:10:30.010000   
AchtungPartizanen

Сообщений: 38
Оценки: 0
Присоединился: 2007-10-25 20:54:58.030000
PS. Мне эту прогу завтра днем сдавать надо
Post #: 34
RE: Работа со строками в C++ - 2007-10-25 23:33:16.490000   
C_4

Сообщений: 46
Оценки: 0
Присоединился: 2007-07-20 13:53:35.103333
AchtungPartizanen я имела в виду - используешь библиотеку string.h
до завтра днём не успею наверное(
Post #: 35
RE: Работа со строками в C++ - 2007-10-26 01:22:01.943333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: AchtungPartizanen
Идея такая. Брать из предложения по одному слову (искать пробелы и отрезать по ним), искать в слове подстроки, если есть, то вывести слово, затем отрезать найденное слово от строки, и так в цикле пока длина строки не ноль.

зачем такие сложности? можно во всём предложении найти нужные подстроки, а затем выделить слова в которых они находятся. отлаживать лень – оно что-то зацикливается, и основной цикл там не лучшим образом сделан, но вот:#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; char *locate_wstart (char *c, char *sentence) { while (c &gt; sentence && c[-1] != ' ') c --; return c; } char *find_occur (char *str, char *in, char *sentence) { char *occur = strstr (in, str); char *space; printf ("occur = %s, str = %s, in = %s\n", occur, str, in); if (!occur) return NULL; occur = locate_wstart (occur, sentence); space = strchr (occur, ' '); if (!space) space = occur + strlen (occur); printf ("word found: %.*s\n", space - occur, occur); return occur; } int main () { char *sentence = "abc xyz qwerty bz"; char *str1= "b", *str2 = "z"; char *start, *ptr; for (start = sentence; start != NULL; start = ptr) { char *tmp; tmp = find_occur (str1, start, sentence); ptr = find_occur (str2, start, sentence); if (tmp || ptr) ptr = tmp &gt; ptr ? ptr : tmp; } return 0; }
Post #: 36
RE: Работа со строками в C++ - 2007-10-26 01:23:01.550000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: C_4

AchtungPartizanen я имела в виду - используешь библиотеку string.h

;)
не надо путать:#include &lt;string.h&gt;и#include &lt;string&gt;
Post #: 37
RE: Работа со строками в C++ - 2007-10-26 14:32:29.903333   
Absurd

Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666
quote:

ORIGINAL: GorluM

чего геморного то? я привык.
а std::string не юзаю, ибо я хз, чего там компилятору взбредет в мой код вставить
в моей программе толькой мой код.

 
Поставь опцию "генерировать asm файлы", и поразись насколько лучше работает std::string чем твои велосипеды.
Post #: 38
RE: Работа со строками в C++ - 2007-10-26 15:57:52.013333   
Inspektor

Сообщений: 143
Оценки: 0
Присоединился: 2007-08-31 11:37:20.710000
AchtungPartizanen, я бы тупо брутом брал, ведь слова для поиска короткие и строка не длинная:
#include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;windows.h&gt; void Find(char* String); void main(void) &nbsp;{ &nbsp; char String[80]; &nbsp; printf("vvedyte predlogenie\n"); &nbsp; scanf("%[a-zA-Z0-9 ]s",&amp;String); &nbsp; Find(String); &nbsp; getch(); &nbsp;} void Find(char* String) &nbsp;{ &nbsp;&nbsp; &nbsp; bool result=false; &nbsp;&nbsp; &nbsp; char Buffer[80]={},x1[3],x2[2]; &nbsp;&nbsp; &nbsp; strcpy(x1,"abc"); &nbsp;&nbsp; &nbsp; strcpy(x2,"de"); &nbsp;&nbsp; &nbsp; int n=0; &nbsp;&nbsp; &nbsp; for(int i=0;;i++) &nbsp;&nbsp; &nbsp; { &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if(String[i]==' '||String[i]=='\0') &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; { &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if(result==true) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; printf("%s\n",Buffer); &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if(String[i]=='\0') &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; break; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; ZeroMemory(&amp;Buffer,80); &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; n=0; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; result=false; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; } &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; else &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; { &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Buffer[n]=String[i]; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if(result==true); &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; else if(Buffer[n]=='a') &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; { &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if(memcmp(String+i,x1,3)==0) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;result=true; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; } &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; else if(Buffer[n]=='d') &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if(memcmp(String+i,x2,2)==0) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; result=true; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; n=n+1; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; } &nbsp;&nbsp; &nbsp; } &nbsp;}
Post #: 39
RE: Работа со строками в C++ - 2007-10-26 16:41:15.626666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: Inspektor
memcmp(String+i,x1,3)

вот так делать не стоит… ведь есть strncmp, пользуйся ею. а то так недолго и за завершающий '\0' вылезти. скорее всего ничего страшного из-за этого не случиться, но если оно так работает, это ещё не повод так делать.
Post #: 40
Страниц:  [1] 2 3 4
Все форумы >> [Компилируемые языки] >> Работа со строками в C++







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.