draculamx Ответов: 4

STL std::string не работает в C++ builder XE10.2


std::string f;
f.append(0,2);
f[0]=2;
f[1]=1;
//f="cd";

std::string s;
s.append(0,5);
s[0]=1;
s[1]=2;
s[2]=1;
s[3]=3;
s[4]=1;
//s="abcde";

unsigned int pp=0;
pp=s.find(f);


этот код прекрасно работает в Visual Studio 2008 sp1,операционная система-Win7 64Bit sp1

но в C++ Builder XE10.2 функция "find" всегда возвращает "NPO"
если изменить строки с нормальными символами,такими как "abcdef","cde",это хорошо работает

Как я могу заставить std::string::find нормально работать в C++ Builder XE10.2 ???

Что я уже пробовал:

std::string f;
//f.append(0,2);
//f[0]=2;
//f[1]=1;
f="cd";

std::string s;
//s.append(0,5);
//s[0]=1;
//s[1]=2;
//s[2]=1;
//s[3]=3;
//s[4]=1;
s="abcde";

unsigned int pp=0;
pp=s.find(f);


изменение std::строка с нормальными символами работает нормально

4 Ответов

Рейтинг:
9

draculamx

s.append(0,5) //wrong
s.append(5,0) //right


извините, что потратил ваше время впустую......


Рейтинг:
2

draculamx

std:string не только используется для символов,на самом деле он может хранить данные, такие как байт каждого элемента.
Итак ,почему "abcde" работает,а "0x1,0x2,0x3" не работает ??

и этот код прекрасно работает в Visual Studio 2008.....


Рейтинг:
16

draculamx

Хорошо, кто-то сказал мне решение

смена "Ф.добавить(0,2); с. добавьте(0,5)" до "f.изменение размера(2); с. размер(5)" тогда это получается!!


Рейтинг:
1

Rick York

Я думаю ты мог бы написать :

f[0] = 'c';
f[1] = 'd';

или
f[0] = 'a' + 2;
f[1] = 'a' + 3;