如何解决字符串不在for循环外的c ++中打印
我尝试使用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
)。因此,您无法使用a[j]
访问/写入任何字符,因为这会写出字符串的当前边界,并产生不确定的行为。
使用...
a.push_back(s[i]);
在字符串末尾附加一个字符。
,由于a
开头是空的,并且正如其他答案所说,您正在写的字符串的当前边界之外,因此可以通过执行以下操作将其大小调整为s
的大小:>
a.resize(s.size());
,并且一旦完成工作,就减少其容量以适合实际尺寸:
a.shrink_to_fit();
这样,您将没有使用std::string::push_back
时可能会有的内存重新分配。
此外,您可以在第一个isupper()
条件下使用if
函数。
但是首先,您必须在第一个char
循环中将s [i]初始化为for
变量,并添加#include<cctype>
库。像这样:
char c = s [i];
if(isupper(c)){
代码
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。