Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Строковые функции в С++


Автор: EvGeniy2605 7.2.2008, 07:12
Короче дело такое:

Я почитал книженции но все равно не могу найти кое что, а именно как в с++ реализованы строковые функции.
В частности:
Ка перевести число в строку?
Как соединить две строки?
Как выдернуть из строки iтый символ и если это цифра преобразовать обратно в число? 

Заранее спасибо. Буду очень благодарен также если меня ткнут носом в книгу где это подробно описано.  smile 

Автор: reat 7.2.2008, 07:29
Для соединения нескольких строк перегружены операторы '+' и '+='
Например:
Код

string a = "Hello "
string b = "World"
string c = a + b;  // == "Hello World"

Автор: Rickert 7.2.2008, 07:49
EvGeniy2605, в С++ таких реализаций нет. Они есть в стандартных либах. Какие ты используешь для работы со строкой?

Автор: chaos 7.2.2008, 09:33
Цитата

Ка перевести число в строку?


Код

ostringstream oss;
oss << 0xffff;
string s = oss.str();

Автор: TeAnton 7.2.2008, 11:17
Это здорово объектноориентированно, но внутреннее чувство такое, что это изврат.
Код


#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    ostringstream ss;
    ss << 2345;
    string s = ss.str();
    cout << s << endl;
    
    istringstream is(s);
    int i;
    is >> i;
    cout << i << endl;
}



2All: А вы как делаете?

Добавлено через 10 минут и 17 секунд
Вытащить символ из строки, как из массива с помощью квадрантых скобок [], индексация с нуля.
Преобразовать в число можно также через istringstream, я делаю проще вычитаю из результата char литерал '0', если результат от 0 до 9, то внутри была цифра. Пока еще не встречал кодировок, где это может не работать. Еще есть способы из C: atoi, sprintf, isdigit, isalpha и т.п.

Автор: Mayk 7.2.2008, 11:29
Цитата(TeAnton @  7.2.2008,  15:17 Найти цитируемый пост)


2All: А вы как делаете?

std::string str = http://forum.vingrad.ru/index.php?showtopic=175814&view=findpost&p=1353515(1234);

Автор: warmonger_ 7.2.2008, 17:33
Цитата(TeAnton @  7.2.2008,  10:17 Найти цитируемый пост)
2All: А вы как делаете?

Код

void Format( int i, string &s)
{
   s=lexical_cast<string>(i); // boost
}



Автор: anatox91 7.2.2008, 18:34
Цитата

Как соединить две строки?

есть функция strcat из cstring...  smile 

Автор: EvGeniy2605 8.2.2008, 17:25
Часть проблем разрешились осталась еще одна:
 при использовании cin он считывает только слово! А мне надо предложение с пробелами как это можно сделать?

Автор: JackYF 8.2.2008, 17:37
Цитата(EvGeniy2605 @  8.2.2008,  16:25 Найти цитируемый пост)
А мне надо предложение с пробелами как это можно сделать? 

cin.getline

Автор: EvGeniy2605 8.2.2008, 18:03
Код

#include "stdafx.h"
#include <iostream.h>
#include <ctime>
#include <math.h>

// Из стандартного пространства имен делаем видимыми
// два монипулятора для вывода текста
using std::wcout;
using std::endl;
using std::cin; 
char str[255];


char q;
int k;


int _tmain(int argc, _TCHAR* argv[])
{
    cin.getline>>str;
    for(int i=0; str[i] != '\0'; i++) {
    if (str[i] == ' ') k++;
    }
    wcout<<k;
    


    cin>>q;
    return 0;
}


Это должно считать пробелы но выдает:
[C++ Error] Unit1.cpp(28): E2235 Member function must be called or its address taken
Есть у кого мысли отчего это? 

Автор: JackYF 8.2.2008, 18:22
Цитата(EvGeniy2605 @  8.2.2008,  17:03 Найти цитируемый пост)
cin.getline>>str;

о, ёлки... прочитать документацию никак?  smile 

getline - вообще-то функция, соответственно вызываться должна с аргументами:
Код

cin.getline(str, sizeof(str));


Автор: anatox91 8.2.2008, 18:27
или включи 
Код

#include <cstdio>


и получай строку 

Код

gets(str);

str - символьный массив, в который надо поместить строку

Автор: tsrtg 12.2.2008, 02:20
Лучше использовать не cin.getline, а std::getline, который читает прямо в строку и не требует буфера фиксированного размера.

Код


string str;
getline(cin, str);


Автор: jonie 13.2.2008, 20:56
Цитата

Пока еще не встречал кодировок, где это может не работать
например UCS-2, UTF-16,UTF-32, UTF-8 .......

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)