字符串不在 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
}
我尝试使用 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
}