Форум программистов, компьютерный форум CyberForum.ru

Посимвольная обработка строки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
vovaxo
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 9
04.07.2011, 22:52     Посимвольная обработка строки #1
простой пример использования функции WordIndex(s,n).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2011, 22:52     Посимвольная обработка строки
Посмотрите здесь:

C++ Посимвольная обработка UTF8 строки
C++ Посимвольная обработка строк
C++ Посимвольная запись в строки из файлов
C++ Посимвольная обработка строк
C++ Посимвольная обработка строк
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tmesser
 Аватар для Tmesser
55 / 55 / 1
Регистрация: 18.12.2010
Сообщений: 385
04.07.2011, 23:13     Посимвольная обработка строки #2
Можно поконкретние задачу обяснить?
vovaxo
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 9
04.07.2011, 23:32  [ТС]     Посимвольная обработка строки #3
мне нужна простенькая программа, которая показывает работу этой функции.
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
05.07.2011, 00:02     Посимвольная обработка строки #4
vovaxo,

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <string.h>
 
int WordIndex(char* str, int number)
{
   int length = 0;
   int i = 1;
   if (number > 0)
   {
       for (char* tok = strtok(str, " "); tok && i < number; tok = strtok(NULL, " "), ++i)
          length += strlen(tok) + 1;
 
       return (i < number) ? 0 : length + 1;
   }
 
   return 0;
}
 
int main()
{
   char str[] = "This is my test string";
   
   printf("%d", WordIndex(str, 5));
 
   return 0;
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
05.07.2011, 00:05     Посимвольная обработка строки #5
Я как понял хотите получить индекс слова в строке, вот держи.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int  WordIndex(const char* src, const char* str) {
      const char* ptr = strstr(src, str);
      if(ptr)
          return  ~(src - ptr) + 1;
      return -1;
}
 
void  main(void) {
 
     char str[] = "Word-Pad 2009";
 
     int index = WordIndex(str,  "Pad");
            if(index != -1)
                   cout << "слово найдено по-индексу: " << index << endl;
             else
                   cout << "слов не найдено" << endl;
 
 
        cin.get();
}
vovaxo
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 9
05.07.2011, 00:14  [ТС]     Посимвольная обработка строки #6
xAtom
ета программа у меня не работает.
можна по-проще. например я не понимаю оператора return ~(src - ptr) + 1;
спасибо!

Добавлено через 4 минуты
а можно с более простыми операторами?
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
05.07.2011, 09:42     Посимвольная обработка строки #7
vovaxo, Что я сильно загнул с решением можно было значительно проще.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.07.2011, 09:47     Посимвольная обработка строки #8
Цитата Сообщение от vovaxo Посмотреть сообщение
простой пример использования функции WordIndex(s,n).
Что за функция ? Что она должна делать?
Индекс слова в строке без учета нескольких пробелов в строке:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h>
unsigned WordIndex(const char * str, const char * word){
    unsigned res = 0;
    const char * p = strstr(str, word);
    while (p != str)
        if (*p-- == ' ') ++res;
    return ++res;
}
int main(){
    char str[100];
    char word[20];
    fgets(str, 100, stdin);
    scanf("%s",word);
    printf("%u\n", WordIndex(str, word) );
    return 0;
}
vovaxo
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 9
05.07.2011, 18:49  [ТС]     Посимвольная обработка строки #9
WordIndex(s,n) определение позиции начала в строке s слова с номером n - выход - указатель на это слово.
нужен простой пример применения этой функции, без сложных операторов
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.07.2011, 18:52     Посимвольная обработка строки #10
vovaxo, вам уже сделали 3 варианта

Цитата Сообщение от vovaxo Посмотреть сообщение
WordIndex(s,n) определение позиции начала в строке s слова с номером n - выход - указатель на это слово.
нужен простой пример применения этой функции, без сложных операторов
так трудно было написать об этом в ПЕРВОМ посте
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.07.2011, 18:54     Посимвольная обработка строки #11
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <string.h>
unsigned WordIndex(char * s, char * n){
    return strstr(s,n) - s + 1;
}
int main(){
    char s[100], n[20];
    gets(s);
    scanf("%s",n);
    printf("%d\n", WordIndex(s,n) );
    return 0;
}
Проще некуда.
Хотя стоп
выход - указатель на это слово.
Как это понимать?
Вам нужен свой аналог функции strstr?
vovaxo
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 9
05.07.2011, 19:17  [ТС]     Посимвольная обработка строки #12
да это моя ошибка, следующий раз буду знать. просто в последнем сообщении были вопросы на которые ответил. спасибо.

Добавлено через 20 минут
diagon
Как это понимать?
Вам нужен свой аналог функции strstr?

мне нужно создать функцию для работы со строковыми переменными без использования библиотеки <string.h>. Определение позиции начала в строке s слова с номером n - выход - указатель на это слово char * WordIndex (s, n)
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
05.07.2011, 19:27     Посимвольная обработка строки #13
diagon, На сколько я понимаю, ему нужна функция которая возвращала указатель на слово в строке по его номеру:

т.е.

C
1
printf("%s", WordIndex("This is string", 2)); // выведет "is"
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.07.2011, 19:27     Посимвольная обработка строки #14
strstr делает тоже самое.
Можно просто поискать ее реализации.
vovaxo
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 9
05.07.2011, 23:02  [ТС]     Посимвольная обработка строки #15
очень спасибо!!!

strstr делает тоже самое.
Можно просто поискать ее реализации.

да. но толька у меня задания использовать функцию WordIndex.

Добавлено через 3 часа 24 минуты
nameless,
а можна тот пример в программе(printf("%s", WordIndex("This is string", 2))
спасибо!!!
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,216
Завершенные тесты: 1
06.07.2011, 01:09     Посимвольная обработка строки #16
Цитата Сообщение от diagon Посмотреть сообщение
strstr делает тоже самое.
Можно просто поискать ее реализации.
держи:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/***
*strstr.c - search for one string inside another
*
*       Copyright (c) 1985-2011, Microsoft Corporation. All rights reserved.
*
*Purpose:
*       defines strstr() - search for one string inside another
*
*******************************************************************************/
 
#include <cruntime.h>
#include <string.h>
 
/***
*char *strstr(string1, string2) - search for string2 in string1
*
*Purpose:
*       finds the first occurrence of string2 in string1
*
*Entry:
*       char *string1 - string to search in
*       char *string2 - string to search for
*
*Exit:
*       returns a pointer to the first occurrence of string2 in
*       string1, or NULL if string2 does not occur in string1
*
*Uses:
*
*Exceptions:
*
*******************************************************************************/
 
char * __cdecl strstr (
        const char * str1,
        const char * str2
        )
{
        char *cp = (char *) str1;
        char *s1, *s2;
 
        if ( !*str2 )
            return((char *)str1);
 
        while (*cp)
        {
                s1 = cp;
                s2 = (char *) str2;
 
                while ( *s1 && *s2 && !(*s1-*s2) )
                        s1++, s2++;
 
                if (!*s2)
                        return(cp);
 
                cp++;
        }
 
        return(NULL);
 
}
vovaxo
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 9
06.07.2011, 01:16  [ТС]     Посимвольная обработка строки #17
schdub,
а где можна найти такую документацию??
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2011, 14:18     Посимвольная обработка строки
Еще ссылки по теме:

Работа с текстовым файлом: как посчитать кол-во букв в слове? (посимвольная обработка) C++
Посимвольная обработка текстового файла: распределение всех слов по длине C++
C++ Посимвольная запись в файл

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vovaxo
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 9
07.07.2011, 14:18  [ТС]     Посимвольная обработка строки #18
извините, но я кажется сам не понял сначала задания. А оно заключаеться в том чтоби создаться собственную функцию char* WordIndex(s,n). Определение позиции начала в строке s слова с номером n - выход - указатель на это слово. как я понимаю то s - char, а n - int.
Yandex
Объявления
07.07.2011, 14:18     Посимвольная обработка строки
Ответ Создать тему
Опции темы

Текущее время: 17:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru