[英]Not able to convert string into a char array
我正在嘗試將帶空格的字符串轉換為不帶空格的char數組。
這是我嘗試過的
string str;
cout << "Enter a string: ";
getline(cin, str);
int TempNumOne=str.size();
char Filename[100];
for (int a=0;a<=TempNumOne;a++)
{
cout<<str[a]<<endl;
if(str[a]!=' ')
Filename[a]=str[a];
}
cout<<Filename;
輸出看起來像這樣
Enter a string: hello world
h
e
l
l
o
w
o
r
l
d
hello
僅存儲hello
。 為什么會發生這種情況,我該如何解決?
這是因為:
if(str[a]!=' ')
Filename[a]=str[a];
在“ hello world”中, str[4]
為o
,而str[6]
為w
。 上面的代碼將:將o
存儲到Filename[4]
,將w
到Filename[6]
,而不是Filename[5]
。 一台計算機只會執行您要執行的操作,現在執行您要執行的操作。 您的邏輯確實跳過了該空間,但是所做的只是沒有將其復制到Filename
緩沖區的相應位置。 這還不足以完成給定的任務。
為了正確執行此操作,您需要維護一個單獨的索引變量,將其稱為b
,例如,將其初始化為0,然后:
if(str[a]!=' ')
Filename[b++]=str[a];
並且不要忘記在Filename
末尾使用null終止。
您的Filename
數組未初始化。 這意味着它可能最初包含任何值,包括零(可能會發生這種情況)。
現在考慮您的算法-您開始將數據復制到第一個空格,然后跳過其位置並繼續第二個單詞。 通過跳過,可以將與Filename
中空間位置相對應的位置保留為其原始狀態,即未初始化。 如果原始值是0,則它對應於字符串終止符( \\0
)。 當您打印字符串時,解析過程在遇到\\0
停止,因此您看不到其余的打印數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.