2014-08-29 32 views
0

我試圖採取一些輸入,並找到一個字符串中的某個字符的數量。當我嘗試接收實際的字符串時,我不斷得到一個奇怪的答案。這是爲什麼發生? 我正在使用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; 
} 
+2

也許你的編譯器可以提供幫助。 http://coliru.stacked-crooked.com/a/aa76f26a2889c724 – chris 2014-08-29 00:06:33

回答

4

局部變量不會自動初始化爲0。如果您在分配之前嘗試使用局部變量的值,則會出現未定義的行爲。你正在增加counting而不用初始化它。更改爲:

int n, k, counting = 0; 
+0

該代碼現在可用。我沒有得到正確的答案,但這比我的解決方案更成爲一個問題。謝謝。 – user44726 2014-08-29 00:14:51

3

的問題是變量「計數」永遠不會初始化 - handy link

基本上,「計數」具有存儲一些垃圾值你

int counting; 
聲明後,

然後,執行的第一個操作是

counting++; 

而且垃圾值被保存。

THE FIX:

變化

int counting; 

int counting = 0; 

注:N和K是無益的變量名。如果他們有真名,它會讓代碼更容易理解,但是哦。

其他: 正如上面提到的克里斯,讓編譯器爲你工作。請參閱下面的評論以獲取良好的編譯器標誌不要忽視警告!

+0

「牆」只有「-Wsome」;它留下了許多警告。要真正得到很多警告,你應該使用'-Wall -Wextra -Wpedantic -std = C++ 11'。 – 2014-08-29 00:48:29

0

真的不明白你在這裏做什麼。但我可以看到你哪裏出錯了。

int n,k,counting;

計數是未初始化嘗試

INT N,K,計數= 0;

我得到的答案是(1 * 4 + 4 - 1)= 7而不是你期望的4。

考慮到k在範圍內,此代碼將始終導致計數= 1。

for (int i = 0; i < n; i++){ 
    if (cards[i] == cards[k-1]){ 
     counting++; 
    } 
} 

https://ideone.com/7Hk3ix

相關問題