我正在尝试接受一些输入并找到字符串中某个字符的编号。当我尝试接收实际的字符串时,我总是得到一个奇怪的答案。为什么会这样? 我正在使用cout来查找为什么我会收到如此奇怪的数字,这似乎是输入的问题。
注意 - 这是我尝试解决Codeforces问题462 B.我试图找到输入中某个字母的编号。我的朋友正在尝试冒泡排序方法。
输入:
6 4
YJSNPI
预期产出:
YJSNPI
4
实际输出:
YJSNPI
1699623981
代码:
#include <iostream>
#include <string>
#include <vector>
#include <istream>
using namespace std;
int main()
{
int n, k, counting;
cin >> n >>k;
char trash;
cin.get(trash);
vector<string> cards;
string theline, name;
cin >> theline;
cout << theline << "\n";
for (int i = 0; i < n; i++){
name = theline[i];
cards.push_back(name);
}
for (int i = 0; i < n; i++){
if (cards[i] == cards[k-1]){
counting++;
}
}
int tmp = 0;
if (cards.size() != k){
tmp = k - counting;
}
counting *= k;
counting += tmp;
cout << counting;
return 0;
}
答案 0 :(得分:4)
本地变量不会自动初始化为0
。如果在分配之前尝试使用局部变量的值,则会得到未定义的行为。您在没有初始化的情况下递增counting
。改为:
int n, k, counting = 0;
答案 1 :(得分:3)
问题是变量“count”从未初始化 - handy link
基本上,“计数”在用
声明之后会从内存中获得一些垃圾值int counting;
然后,执行的第一个操作是
counting++;
并保存垃圾值。
THE FIX:
更改
int counting;
到
int counting = 0;
注意:n和k对变量名称没有帮助。如果它们有真实的名字,它会使代码更容易理解,但是很好。
此外: 正如上面提到的克里斯,让编译器为你工作。有关良好的编译器标志,请参阅下面不要忽视警告!
答案 2 :(得分:0)
无法真正理解你在这里做了什么。但我可以看到你哪里出错了。
int n,k,counting;
计数未初始化尝试
int n,k,counting = 0;
我得到(1 * 4 + 4 - 1)= 7的回答而不是你期望的4。
如果k在范围内,则此代码将始终导致计数= 1.
for (int i = 0; i < n; i++){
if (cards[i] == cards[k-1]){
counting++;
}
}