字符串不在 for 循环外的 C++ 中打印

string is not printing in c++ outside the a for loop

我尝试使用 C++ 分隔给定字符串中的 A-Z 字符,但分隔的字符串未打印在输出中,但如果我在 for 循环内移动“cout”语句,它会打印字符。我不知道为什么会这样。如果我做错了什么,请告诉我。

我的代码

#include<iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;    //number of test cases

    while(t--)
    {
        string s,a,n;
        int j=0,k=0;
        char temp;

        cin>>s;      //getting string

        for(int i=0; i<s.length(); i++)
        {

            if(s[i]>=65 && s[i]<=90)       //checking for alphabets
            {
                a[j]=s[i];
                j++;
                cout<<a[j-1]<<endl;
            }

            else
            {
                n[k]=s[i];
                k++;
                cout<<n[k-1]<<endl;
            }

        }

        cout<<endl<<a<<endl<<n;       //this line is not printing
     }
}

字符串 a 在初始化后为空(即它的长度为 0)。所以你不能 access/write 使用 a[j] 的任何字符,因为这会超出字符串的当前范围并产生未定义的行为。

使用...

a.push_back(s[i]);

在字符串末尾追加一个字符。

由于 a 开头是空的,正如其他答案所说,您正在编写超出字符串当前范围的内容,您可以通过执行以下操作将其调整为 s 的大小:

a.resize(s.size());

并且,完成工作后,减少其容量以适应实际大小:

a.shrink_to_fit();

这样您就不会像使用 std::string::push_back.

时那样重新分配内存

此外,您可以在第一个 if 条件中使用 isupper() 函数。 但首先你必须在 for 循环中将 s[i] 初始化为 char 变量并添加 #include<cctype> 库。像这样:

char c = s[i];
if(isupper(c)){
code
}