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

std:string - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.60
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.04.2011, 09:55     std:string #1
1. Поддерживает ли этот класс сравнение целиком строк? Каков синтаксис сравнения строк?
2. Поддерживает ли этот класс конкатенацию? Каков синтаксис конкатенации?
3. Как получить длину строки?
4. С какого номера нумеруются символы: с ноля, или с однёрки?
5. Как получить символ по заданному номеру?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
27.04.2011, 10:03     std:string #2
http://www.cplusplus.com/reference/string/string/

Добавлено через 33 секунды
Ну, и Джосаттиса почитать можно, книжку по стл.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
27.04.2011, 10:04     std:string #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
int main(){
    std::string a("aaa");
    std::string b("bbb");
    
    std::string ab = a + b;
    std::cout << ab << " : " << ab.size() << " characters" << std::endl;
    std::cout << "First symbol: " << ab[0] << std::endl;
    std::cout << "Fourth symbol: " << ab.at(4) << std::endl;
    
    return 0;
}
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.04.2011, 10:10  [ТС]     std:string #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
std:sting s1, s2, s3;
bool b1,b2, b3, b4, b5, b6;
...
// Эти:
s1=s2+s3;
b1=s2<s3;
b2=s2<=s3;
b3=s2>s3;
b4=s2>=s3;
b5=s2==s3;
b6=s2!=s3;
//строки будут работать?
Добавлено через 42 секунды
Цитата Сообщение от oxotnik Посмотреть сообщение
мда... по моему автор попутал форум с хелпом
А с чего ты взял, что у меня есть хелп?
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
27.04.2011, 10:20     std:string #5
Цитата Сообщение от taras atavin Посмотреть сообщение
//строки будут работать?
Принцип сравнения строк в std::string такой же, как и в strcmp. И, да, эти строки будут работать.

Не по теме:

Ну а разве попробовать самому и проверить хотя бы не проще, чем писать это на форуме. Да и ответы на эти вопросы написаны в любой книге.

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.04.2011, 10:25  [ТС]     std:string #6
Цитата Сообщение от fasked Посмотреть сообщение
И, да, эти строки будут работать.
Все?
Цитата Сообщение от fasked Посмотреть сообщение
strcmp
Этой функции я подавно не знаю.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
27.04.2011, 10:36     std:string #7
Цитата Сообщение от taras atavin Посмотреть сообщение
Все?
Ну если правильно записать, то все... например вместо std:sting, написать все же std::string.
Цитата Сообщение от taras atavin Посмотреть сообщение
Этой функции я подавно не знаю.
Функция для сравнения C-like строк а-ля char[], char *.

Добавлено через 4 минуты
 Комментарий модератора 
Заканчиваем оффтоп. Для выяснения причин, по которым у кого-то гугл ищет лучше перебирайтесь в личку.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.04.2011, 11:56  [ТС]     std:string #8
Цитата Сообщение от fasked Посмотреть сообщение
Функция для сравнения C-like строк а-ля char[], char *.
Я такие функции сам пишу как раз по причине не знания стандартных.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.04.2011, 12:40     std:string #9
Цитата Сообщение от taras atavin Посмотреть сообщение
по причине не знания стандартных
А стандартные-то супер-гига-пупер оптимизированные. На ассемблере...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
27.04.2011, 18:25     std:string #10
Цитата Сообщение от Deviaphan Посмотреть сообщение
А стандартные-то супер-гига-пупер оптимизированные. На ассемблере...
Да ну нафиг! В чью больную голову прийдёт strcmp() на ассемблере писать?! Вот она в биэсдишных сорсах - копирайтов в 10 раз больше!

Код
[andrew@server1 ~]$ cat /usr/src/lib/libc/string/strcmp.c
/*-
 * Copyright (c) 1990, 1993
 *      The Regents of the University of California.  All rights reserved.
 *
 * This code is derived from software contributed to Berkeley by
 * Chris Torek.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)strcmp.c    8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: src/lib/libc/string/strcmp.c,v 1.7.2.1.6.1 2010/12/21 17:09:
25 kensmith Exp $");

#include <string.h>

/*
 * Compare strings.
 */
int
strcmp(const char *s1, const char *s2)
{
        while (*s1 == *s2++)
                if (*s1++ == '\0')
                        return (0);
        return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1));
}
[andrew@server1 ~]$
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.04.2011, 18:38     std:string #11
Цитата Сообщение от easybudda Посмотреть сообщение
Да ну нафиг!
Ну, я не только про strcmp.)))
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
27.04.2011, 19:20     std:string #12
Цитата Сообщение от easybudda Посмотреть сообщение
В чью больную голову прийдёт strcmp() на ассемблере писать?!
Вот, пожалуйста:
Assembler
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
        page    ,132
        title   strcmp.asm - compare two strings
;***
;strcmp.asm - routine to compare two strings (for equal, less, or greater)
;
;       Copyright (c) Microsoft Corporation. All rights reserved.
;
;Purpose:
;       STRCMP compares two strings and returns an integer
;       to indicate whether the first is less than the second, the two are
;       equal, or whether the first is greater than the second, respectively.
;       Comparison is done byte by byte on an UNSIGNED basis, which is to
;       say that Null (0) is less than any other character (1-255).
;
;*******************************************************************************
 
        .xlist
        include cruntime.inc
        .list
 
page
;***
;strcmp - compare two strings, returning less than, equal to, or greater than
;
;Purpose:
;       Compares two string, determining their lexical order.  Unsigned
;       comparison is used.
;
;       Algorithm:
;          int strcmp ( src , dst )
;                  unsigned char *src;
;                  unsigned char *dst;
;          {
;                  int ret = 0 ;
;
;                  while( ! (ret = *src - *dst) && *dst)
;                          ++src, ++dst;
;
;                  if ( ret < 0 )
;                          ret = -1 ;
;                  else if ( ret > 0 )
;                          ret = 1 ;
;
;                  return( ret );
;          }
;
;Entry:
;       const char * src - string for left-hand side of comparison
;       const char * dst - string for right-hand side of comparison
;
;Exit:
;       AX < 0, 0, or >0, indicating whether the first string is
;       Less than, Equal to, or Greater than the second string.
;
;Uses:
;       CX, DX
;
;Exceptions:
;
;*******************************************************************************
 
        CODESEG
 
        public  strcmp
strcmp  proc \
        str1:ptr byte, \
        str2:ptr byte
 
        OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
        .FPO    ( 0, 2, 0, 0, 0, 0 )
 
        mov     edx,[esp + 4]   ; edx = src
        mov     ecx,[esp + 8]   ; ecx = dst
 
        test    edx,3
        jnz     short dopartial
 
        align   4
dodwords:
        mov     eax,[edx]
 
        cmp     al,[ecx]
        jne     short donene
        or      al,al
        jz      short doneeq
        cmp     ah,[ecx + 1]
        jne     short donene
        or      ah,ah
        jz      short doneeq
 
        shr     eax,16
 
        cmp     al,[ecx + 2]
        jne     short donene
        or      al,al
        jz      short doneeq
        cmp     ah,[ecx + 3]
        jne     short donene
        add     ecx,4
        add     edx,4
        or      ah,ah
        jnz     short dodwords
 
        align   4
doneeq:
        xor     eax,eax
        ret
 
        align   4
donene:
        ; The instructions below should place -1 in eax if src < dst,
        ; and 1 in eax if src > dst.
 
        sbb     eax,eax
        sal     eax,1
        add     eax,1
        ret
 
        align   4
dopartial:
        test    edx,1
        jz      short doword
 
        mov     al,[edx]
        add     edx,1
        cmp     al,[ecx]
        jne     short donene
        add     ecx,1
        or      al,al
        jz      short doneeq
 
        test    edx,2
        jz      short dodwords
 
 
        align   4
doword:
        mov     ax,[edx]
        add     edx,2
        cmp     al,[ecx]
        jne     short donene
        or      al,al
        jz      short doneeq
        cmp     ah,[ecx + 1]
        jne     short donene
        or      ah,ah
        jz      short doneeq
        add     ecx,2
        jmp     short dodwords
 
strcmp  endp
 
        end
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
27.04.2011, 19:21     std:string #13
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Microsoft Corporation
Ну разве что...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.04.2011, 19:29     std:string #14
А я этот файл сейчас не смог найти.) Поэтому не привёл кода его.)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
27.04.2011, 19:37     std:string #15
Не вспомню где именно, но в какой-то хорошей книжке по UNIX читал, что Ритчи собственно язык С придумал, чтоб вот такой фигнёй на ассемблере не заниматься. Но мелкомягкие всегда своим путём идут...

Добавлено через 32 секунды
PraZuBeR, кстати, просто из любопытства: а Вы это где взяли?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2011, 19:42     std:string
Еще ссылки по теме:

C++ Как привести std::wstring к std::string?
C++ Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &'
C++ Std::string and std::wstring convert

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

Или воспользуйтесь поиском по форуму:
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
27.04.2011, 19:42     std:string #16
Цитата Сообщение от easybudda Посмотреть сообщение
PraZuBeR, кстати, просто из любопытства: а Вы это где взяли?
C++
1
2
3
4
5
6
int main()
{
  char a[] = "111";
  char b[] = "222";
  strcmp(a,b);
}
И поехали F11 (Step Into). 2008 студия.
Yandex
Объявления
27.04.2011, 19:42     std:string
Ответ Создать тему
Опции темы

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