2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Поиск подстроки
Сообщение24.03.2009, 19:21 
Аватара пользователя
Здравствуйте!
1. Если ли в С++ функция поиска подстроки в строке?
2. (Не имеет отношения к п. 1). Имеется строка, содержащая $n$ чисел, разделенных пробелами. Какой самый простой способ (с точки зрения программирования) считать их в массив?

 
 
 
 
Сообщение24.03.2009, 19:35 
По поводу первого, вы ищите функцию, подобную функции pos в Паскале ?
2. Я думаю, что проще всего считывать, проверяя не пробел ли это число, которое должно оказаться в массиве. Хотя это уже усложнение, опять же с точки зрения программирования.
Скорее всего, проще считывать числа из строки, на каждом шаге увеличивать на единицу счетчик, помимо увеличения, например, FOR. Соответственно, нужно указать границу максимального значения счетчика, которым вы бежите по строке . :)

 
 
 
 
Сообщение24.03.2009, 20:00 
Аватара пользователя
DoGGy в сообщении #198228 писал(а):
По поводу первого, вы ищите функцию, подобную функции pos в Паскале ?

Мне нужна функция, которая бы возвращала первое вхождение подстроки в строку.

DoGGy в сообщении #198228 писал(а):
Я думаю, что проще всего считывать, проверяя не пробел ли это число, которое должно оказаться в массиве. Хотя это уже усложнение, опять же с точки зрения программирования.
Скорее всего, проще считывать числа из строки, на каждом шаге увеличивать на единицу счетчик, помимо увеличения, например, FOR. Соответственно, нужно указать границу максимального значения счетчика, которым вы бежите по строке . Smile

У меня в строке числа, а не цифры, получается сложно. Я хотел поступить следующим образом. Пусть $n=2$ и строка имеет вид s="1234 567". Тогда бы я написал
Код:
sscanf(s,"%i %i",&a,&b);

Как можно модифицировать этот код для произвольного $n$?

 
 
 
 Re: Поиск подстроки
Сообщение24.03.2009, 20:34 
AndreyXYZ писал(а):
Здравствуйте!
1. Если ли в С++ функция поиска подстроки в строке?
2. (Не имеет отношения к п. 1). Имеется строка, содержащая $n$ чисел, разделенных пробелами. Какой самый простой способ (с точки зрения программирования) считать их в массив?

1. http://www.cplusplus.com/reference/stri ... /find.html
2. проще всего используя stringstream наверное.
Код:
#include <string>
#include <iostream>
#include <sstream>

string s; // = data
istringstream is(s);
int a;
while(is >> a) ... // с числами a уже делаем че надо

 
 
 
 
Сообщение24.03.2009, 22:26 
Аватара пользователя
Поиск работает быстро (алгоритм Кнута-Морриса-Пратта, Бойера-Мура или наивный)? Похоже, что алгоритм самый простой. Тем не менее, большое спасибо.

 
 
 
 
Сообщение25.03.2009, 00:04 
Аватара пользователя
В стандартной библиотеке функция strstr в точности ищет одну подстроку в другой

http://www.cplusplus.com/reference/clib ... trstr.html

 
 
 
 
Сообщение25.03.2009, 19:46 
Цитата:
В стандартной библиотеке функция strstr в точности ищет одну подстроку в другой

Однако, strstr - это Си :).

 
 
 
 
Сообщение25.03.2009, 21:01 
Аватара пользователя
Я не думаю, что в данном случае это принципиально.

 
 
 [ Сообщений: 8 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group