我們可以在C++中接受和打印這樣的字符串嗎? 此代碼無法正常工作。接受和打印一個字符串
#include<iostream>
#include<string>
using namespace std;
main()
{
string a;char ch;
for(int i=0;i<5;i++)
{cin>>ch;
a[i]=ch;
}
a[5]='\0';
cout<<a;
}
我可以打印單個元素,如[1],a [2]等,但無法打印整個字符串。爲什麼?
我們可以在C++中接受和打印這樣的字符串嗎? 此代碼無法正常工作。接受和打印一個字符串
#include<iostream>
#include<string>
using namespace std;
main()
{
string a;char ch;
for(int i=0;i<5;i++)
{cin>>ch;
a[i]=ch;
}
a[5]='\0';
cout<<a;
}
我可以打印單個元素,如[1],a [2]等,但無法打印整個字符串。爲什麼?
如果你想採取一個字符串,你可以做到以下幾點。
#include <iostream>
int main() {
std::string str;
std::getline(std::cin, str);
std::cout << str;
}
此外,C++會自動終止您使用的任何字符串文字。
先生,謝謝你非常想回復,但我在末尾添加了一個以空字符結尾的字符串,但它不起作用,我們能不能訪問字符串的元素use []運算符嗎?我不是直接爲它添加元素? 而我綁定的問題的輸入涉及元素之間輸入的空間像1 2 3 4,所以如何接受這些元素並將它們存儲在一個字符串? –
爲什麼你要使用一個字符串?爲什麼不使用向量並將數字推回給它? – ChemiCalChems
嗯,它並不是真正接近最佳實踐的地方,但要解決實際調整字符串大小所需的直接問題。
#include<iostream>
#include<string>
main()
{
std::string a;char ch;
a.resize(5); // <--- reserves memory
for(int i=0;i<5;i++)
{
std::cin>>ch;
a[i]=ch;
}
a[5]='\0'; //<-- unnecessary
st::cout<<a;
}
或者你可以追加字符
#include<iostream>
#include<string>
main()
{
std::string a;char ch;
for(int i=0;i<5;i++)
{
std::cin>>ch;
a+=ch;
}
std::cout<<a;
}
先生,非常感謝您的回覆,但我們爲什麼要這樣做先生?不會自動處理內存並在必要時進行擴展? –
@AjaySabarish當你使用'append'或'operator + ='或類似的東西時,但['operator []'](http://en.cppreference.com/w/cpp/string/basic_string/operator_at)doesn不做任何界限檢查 – PeterT
難道你寧願使用'reserve'而不是'resize'?'resize'會初始化爲零,'reserve'只會保留空間而沒有初始化 –
可以打印這樣
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;char ch;
for(int i=0;i<5;i++)
{
cin>>ch;
a.push_back(ch);
}
a.push_back('\0');
cout << a;
return 0;
}
這裏真正的問題不在於你無法讀取或不能串打印字符串,是你正在寫入未分配的內存。 operator[]
,這是您在使用a[i]=ch
之類的東西時所使用的內容,不會執行任何類型的邊界檢查,因此導致未定義的行爲。例如,在我的機器中,沒有打印任何內容。
總之,你需要確保你有空間來寫你的角色。如果你確信你要讀5個字符(並在結尾處增加一個\ 0,使其成爲6長),你可以做這樣的事情:
std::string a(6, '\0')
如果你不能確定有多少將要閱讀的字符std::string
已準備好根據需要分配空間,但您需要使用std::push_back
才能爲其提供機會。你的循環的內容會是這樣的:
cin >> ch;
a.push_back(ch);
如果您不能確定在std::string
對象是來自(如,這是接受std::string
作爲參數庫代碼,你可以使用at(i)
(例如,a.at(i) = ch
而不是a[i] = ch
),如果它超出範圍,將引發異常。
https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice – ChemiCalChems