C++ 如何一次从字符串中选取两个字符?到达字符串的第i个位置?

C++ 如何一次从字符串中选取两个字符?到达字符串的第i个位置?,c++,string,char,C++,String,Char,如何运行for循环从字符串中一次选取两个字符 int main{ string data; for (i = 0; i <= data.size(); i+=2) d = data[i] + data[i+1]; cout << "the list of two characters at a time is" << d; } 我不明白如何在C++中实现字符串数据的第i个位置。 你如何使用子串(< /代码>?< /p>) for(inti=0;i您如何使用subs

如何运行for循环从字符串中一次选取两个字符

int main{
string data;
for (i = 0; i <= data.size(); i+=2)
d = data[i] + data[i+1];
cout << "the list of two characters at a time is" << d;
}

<>我不明白如何在C++中实现字符串数据的第i个位置。

你如何使用<代码>子串(< /代码>?< /p>)
for(inti=0;i您如何使用
substr()


for(inti=0;i您如何使用
substr()


for(inti=0;i您如何使用
substr()


for(int i=0;i除了两个问题外,您几乎完全正确:

  • 如果循环条件错误,可能是这样的:

    for(i=0;i+1

    否则,您将尝试访问字符串末尾后面的数据。在这种情况下,若字符串长度为奇数,您将跳过1个符号。若您需要处理该值,则循环应不同

  • 添加2个字符作为数字,但应将其设置为字符串:

    d=std::string(数据[i])+数据[i+1];


  • 除了两个问题外,您几乎完全正确:

  • 如果循环条件错误,可能是这样的:

    for(i=0;i+1

    否则,您将尝试访问字符串末尾后面的数据。在这种情况下,若字符串长度为奇数,您将跳过1个符号。若您需要处理该值,则循环应不同

  • 添加2个字符作为数字,但应将其设置为字符串:

    d=std::string(数据[i])+数据[i+1];


  • 除了两个问题外,您几乎完全正确:

  • 如果循环条件错误,可能是这样的:

    for(i=0;i+1

    否则,您将尝试访问字符串末尾后面的数据。在这种情况下,若字符串长度为奇数,您将跳过1个符号。若您需要处理该值,则循环应不同

  • 添加2个字符作为数字,但应将其设置为字符串:

    d=std::string(数据[i])+数据[i+1];


  • 除了两个问题外,您几乎完全正确:

  • 如果循环条件错误,可能是这样的:

    for(i=0;i+1

    否则,您将尝试访问字符串末尾后面的数据。在这种情况下,若字符串长度为奇数,您将跳过1个符号。若您需要处理该值,则循环应不同

  • 添加2个字符作为数字,但应将其设置为字符串:

    d=std::string(数据[i])+数据[i+1];


  • std::cout
    std::cout
    std::cout
    std::cout甚至没有想到那一点,nice one甚至没有想到那一点,nice one甚至没有想到那一点,nice one只是为了避免一些崩溃…我建议
    assert(data.size()%2==0);
    或循环前的某种检查。否则,如果字母数为奇数,则会出现一个off-by-one错误,并可能导致崩溃。如果字符串大小为奇数,则应在字符串中附加一个“\x00”,以强制其大小为偶数?正是!这就是我指定的:)最后8个字节(或奇数字符)应该加上零。为了避免一些崩溃…我建议
    assert(data.size()%2==0);
    或在循环之前进行某种检查。否则,如果有奇数个字母,您将出现一个off-by-one错误,并且可能会崩溃。如果它的大小奇数,您应该只添加一个“\x00”对于字符串,要强制其大小为偶数?没错!这就是我指定的:)最后8个字节(或奇数字符)应附加零。为了避免一些崩溃…我建议
    assert(data.size()%2==0);
    或循环前的某种检查。否则,如果字母数为奇数,则会出现一个off-by-one错误,并可能导致崩溃。如果字符串大小为奇数,则应在字符串中附加一个“\x00”,以强制其大小为偶数?正是!这就是我指定的:)最后8个字节(或奇数字符)应该加上零。为了避免一些崩溃…我建议
    assert(data.size()%2==0);
    或在循环之前进行某种检查。否则,如果有奇数个字母,您将出现一个off-by-one错误,并且可能会崩溃。如果它的大小奇数,您应该只添加一个“\x00”对于字符串,强制其大小为偶数?没错!这就是我指定的:)最后8个字节(或奇数字符)应追加零。我得到一个错误:当我使用您在2中指定的内容时,从“char”到“const char*”的转换无效。我得到一个错误:当我使用您在2中指定的内容时,从“char”到“const char*”的转换无效。我得到一个错误:当我使用您在2中指定的内容时,从“char”到“const char*”的转换无效。我得到一个错误错误:当我使用您在2中指定的内容时,从“char”到“const char*”的转换无效。
    cout should give:
    
    he
    
    ll 
    
    o(space)
    
    ho
    
    w(space)
    
    ar
    
    e(space)
    
    yo
    
    u //the last one is appended with 8 zeros with u to make a complete pair
    
    for (int i=0; i<data.length(); i+=2) {
        if(i+2 < data.length()){              //prevent it from throwing out_of_range exception
            d = data.substr(i,i+2);
            cout << d << endl;
        }
    }
    
    std::cout << "the list of two characters at a time is:\n";
    for (i = 0; i < data.size(); ++i) {
        if (data[i] == ' ')
            std::cout << "(space)";
        else
            std::cout << data[i];
        if (i % 2 != 0)
            std::cout << '\n';
    }