2017-12-27 333 views
2

我有一個小程序,我已經聲明瞭兩個字符串變量。我將輸入字符串的第一個字母轉換爲大寫字母,並將第一個字符串的內容複製到第二個字符串。但是,如果我嘗試打印(m字符串的)內容,程序不會打印任何內容。你能告訴我爲什麼會發生?將字符串複製到C++中的另一個字符串並打印其字符?

#include <iostream> 
#include <string.h> 

string n, m; 

int main() 
{ 
    cin >> n; 
    char first_letter = n.at(0); 
    char f = toupper(first_letter); 
    n[0] = f; 
    for(int s = 0; s < n.length(); s++) { 
     m[s] = n.at(s); 
    } 
    for(int p = 0; p < m.length(); p++) { 
     cout << m[p] << endl; 
    } 
} 
+0

「M」串長度爲0,因爲你從未它調整爲字符串「n」個 – Amadeusz

+0

的長度你真的應該在'm'上使用'at()'函數。你會立即看到錯誤。 'm.at(s)= n.at(s);' – PaulMcKenzie

+1

要將'n'複製到'm',您只需要執行'm = n;' –

回答

3

爲什麼這麼複雜? 我假設您使用的是std::string

#include <iostream> 
#include <string> 

std::string n,m; 
int main(){ 
    std::cin>>n; 
    n[0] = std::toupper(n.at(0)); 
    m = n; 
    std::cout << m << std::endl; 
} 

at()函數執行運行時檢查,如果該索引超出範圍的或沒有。 operator[]沒有。

+0

Psst,您需要先將'std ::' 'cin'(你確實把它放在'cout'上)。可悲的是,我還不能編輯答案,所以我不能爲你添加它。 –

+0

@TheAspiringHacker謝謝;) – DNK

0

沒有打印的原因是你的m-string的長度爲零。在第一個循環中,您基本上正在寫入未分配的內存,並且不會將新值附加到m的末尾。

相關問題