如何解决以“ 1”开头和结尾的子字符串数
我正在尝试查找以'1'开头和结尾的子字符串的数量,其中输入字符串是1111、10001等数字。给定的代码未显示正确的输出,但是如果我用cin代替getline作为输入方法该代码工作正常。如果我跳过n的输入(n是要输入的字符串的长度)并在for循环中使用i #include <iostream>
#include <string>
using namespace std;
int main(){
int n;
cin>>n;
string str;
getline(cin,str);
int c=0;
for(int i=0;i<n;i++)
if(str[i]=='1')
c++;
c=c*(c+1)/2;
cout<<c;
return 0;
}
解决方法
这是因为getline
读取n
之后的所有字符,直到该行的末尾包括空格。因此,str
的长度将由于开头的间隔而等于n + 1。
如何解决(例如):for(int i = 1; i < n + 1; i++)
共享代码可能出现的问题是:
-
首先收集变量“ n”中的输入,然后通过getline()将其分配给字符串变量似乎是多余的。可以使用单个getline()语句完成预期的工作:“ getline(cin,str);”
-
for循环中变量“ n”的用法:变量“ n”用于获取输入字符串的长度(以便循环可以将字符串“ 1”的所有元素进行比较。根据共享代码,您正在尝试执行n个时间的for循环,我认为这不是期望。) 例如:如果字符串输入为“ 111”,则该循环将执行111次,并应运行3次(如果我对代码动机的理解此处不同,请更正?) 当前的循环条件检查肯定会导致“字符串下标超出范围”声明失败。
int n; cin >> n; 字符串str; getline(cin,str); int c = 0; 对于(int i = 0; i
根据我的说法,上面的代码行可以由下面的代码块代替。
string str;
getline(cin,str);
int c = 0;
int n = str.size();
for (int i = 0; i < n; i++)
{}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。