C++では、既に初期化された別の文字列(文字列クラス)から文字をインデックスワイズでコピーすることにより、新しい文字列(文字列クラス)を作成しました。C++の文字列は、すでに初期化された他の文字列からインデックス文字をコピーして形成されます。 coutを使って新しく形成された文字列を印刷することができません
しかし、cout
を使用してこの新しい文字列を画面に印刷できません。 c_str()
を使用して、cout
を使用して印刷できます。しかし、printf()
を使用する場合にのみ、Cタイプ文字列が必要なので、c_str()
は必要ありませんか?
#include <cstring>
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int i;
string a,b;
cin>>a;
for(i=0;a[i]!='\0';i++){
b[i]=a[i];
}
cout<<b;
return 0;
}
編集:ありがとうございました!しかし私は私の質問ではっきりしていないかもしれないので、これが私が持っている主要な問題です。あなたが私をさらに助けることができるなら、それは素晴らしいでしょう! (また、私はb=a;
を割り当てる最も簡単な方法ですが、私は文字列を理解しようとしているので、質問です。)
a)私はcpp文字列がnull終端され、初期化後の文字列は、ループが終了し、文字列aの最後の文字の後で終了したため、NULL終了しました。ループの終了時に、cout<<a[i];
の最後の文字が出力されるためです。
b)ループの中で、cout<<b[i];
を含めると割り当て後、b [i]に割り当てられたと思われる値が出力されます。ですから、何らかの奇妙な理由のためにb [i]は存在します。
c)forループの外側では、プログラムの最後で、I cout<<b[2];
が文字列の3番目の文字を出力します。そして私がcout<<b.c_str();
を行うと、文字列全体が表示されます。その唯一の場合私はcout<< b;
何も印刷されません。どうしてこれなの?
のstd ::文字列ではありません(!)nullはそれがよいか(でも途中で)「\ 0」を含んでも含まなくても、 –
C-終端文字列...あなたのループが間違っている –
ますミスタイプの 'b = a;'。 – LogicStuff