我有一个非常大的char数组,我遍历数组。我寻找具有逻辑的模式,例如:
if (array[n] == 'x' and array[n+1] == 'y' and array[n+2] == 'z')
{
mystring = array[n+4] + array[n+5];
}
如果array [n + 4]为'4'且array [n + 5]为'5'则mystring =“45”
然而,mystring总是“”,我做错了什么?我不想使用子字符串,因为数组太大。我只想将字符转换为字符串然后追加到mystring。
答案 0 :(得分:2)
您正在检查连续"xyz"
次出现,为什么不直接使用std::string
?
std::string s(array);
size_t i =s.find("xyz");
if(i!=std::string::npos && i+5 <= s.size())
{
std::string mystring = std::string(1,array[i + 4]) + array[i + 5];
std::cout<<mystring;
}
答案 1 :(得分:2)
我建议使用assign(const char *,len); 没有复制构造函数
if (array[n] == 'x' and array[n+1] == 'y' and array[n+2] == 'z')
{
mystring.assign(array + n + 4, 2);
}
答案 2 :(得分:0)
您可以将字符转换为整数,反之亦然,因为它们是基本语言类型。字符串是作为一个类实现的,因此你需要为两个字符调用字符串构造函数,然后将两个结果字符串连接成mystring
答案 3 :(得分:0)
如果你不能首先使用std::string
,正如@ P0W所建议的那样(这是一个很好的建议),那么还有另一种方法可以做这个不涉及字符串构造函数的转换(我认为使用字符串构造函数的解决方案是一个很好的解决方案,但知道不同的方法可以提供更多的灵活性),但依赖于std :: string :: append。
int main ()
{
// create char
char *str1 = new char[6];
strcpy( str1,"hello ");
char *str2 = new char[5];
strcpy(str2, "world" );
// use of append to convert to a string
std::string mystring;
mystring.append(str1);
mystring.append(str2);
std::cout << mystring << std::endl;
}
检查std::string::append
documentation,您还会看到此函数的重载之一是string& append (const char* s, size_t n)
,这意味着您可以根据需要转换char数组的子集它
答案 4 :(得分:0)
添加字符串不像C ++中的那样。更简单的方法是创建一个stringstream
并将字符添加到字符串中,并使用&lt;&lt;运算符,然后使用str()
方法从中恢复字符串。
示例:
#include <iostream>
#include <sstream>
using namespace std;
int main(void)
{
char a[] = {'a', 'd', 'c', 'b', 'a' };
stringstream linestream;
linestream << a[0] << a[1];
cout << linestream.str() << endl; // Prints ad
return 0;
}