0

我有一个非常大的 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。

4

5 回答 5

4

我建议使用 assign(const char*, len); 不涉及复制构造函数

if (array[n] == 'x' and array[n+1] == 'y' and array[n+2] == 'z')
{
   mystring.assign(array + n + 4, 2);
}
于 2013-09-01T20:13:37.617 回答
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;
}
于 2013-09-01T19:47:50.347 回答
0

您可以将字符转换为整数,反之亦然,因为它们是基本语言类型。字符串被实现为一个类,因此您需要为两个字符调用字符串构造函数,然后将两个结果字符串连接到 mystring

于 2013-09-01T19:46:45.403 回答
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 文档,您还将看到此函数的重载之一是string& append (const char* s, size_t n),这意味着您可以根据您的要求仅转换 char 数组的子集。

于 2013-09-01T20:01:06.547 回答
0

在 C++ 中添加字符串不像那样工作。更简单的方法是使用 << 运算符创建 astringstream并将字符添加到字符串中,然后使用该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;
}
于 2013-09-01T20:02:58.703 回答