2017-12-27 334 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的末尾。

相关问题