#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
string s;
getline(cin,s);
int n= s.length();
string ans;
ans[0]=s[0];
int j=1;
for(int i=1; i<n; i ){
if(s[i]!=s[i-1]){
ans[j]=s[i];
j ;
}
}
ans[n]='\0';
cout<<ans<<endl;
// for(int i=0; i<n; i ){
// cout<<ans[i];
// }
cout<<endl;
return 0;
}
我無法ans使用 simple列印變數cout<<ans<<endl。相反,我必須使用回圈來列印它。這是為什么?
uj5u.com熱心網友回復:
這里
string ans;
ans是一串長度0。在下一行中,您已經通過嘗試修改字串末尾之外的元素來呼叫未定義的行為:
ans[0]=s[0];
您可以通過ans = character;或向字串添加字符ans.push_back(character);。您無法列印ans通過,std::cout因為您從未向其中添加字符。
uj5u.com熱心網友回復:
我不確定 C ,但在 C 中字串是字符陣列。因此,假設您定義了這樣的字串:
char ans[]="Hello";
它將以字符陣列的形式存盤字串,而 ans 將指向陣列的第一個元素。
問題是陣列指示符(您用于陣列的名稱)被隱式轉換為指標。因此,對于 string ans,它不是存盤整個字串的整個容器,Hello而是指向一組按順序排列的容器的第一個塊,這些容器分別保存H e l l o字符。
因此,如果您列印ansso 它只會提供它指向的容器的資料,而不是整個容器組。
雖然答案不是那么相關,但我希望這個概念有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/346453.html
