[英]Copying selected character from string
我的輸入字符串是
\\\\?\\bac#dos&ven_bb&prod_open-v&rev_5001#1&7f6ac24&0&353020304346333030363338#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
所需的輸出是
bac\\dos&ven_bb&prod_open-v&rev_5001\\1&7f6ac24&0&353020304346333030363338_0
我已經編寫了以下代碼,但無法正常工作...需要幫助才能解決問題。 原諒我的無知:)也請讓我知道是否有更好和有效的方法來做到這一點。
輸出字符串的規則是
在第二個字符串中,我要刪除所有的“ \\”和“?” 。在哪里看到“#”,我將其替換為“ \\”。 並且第二個字符串僅在您看到字符“ {”之前,但在其末尾不包含“#”。
謝謝
int main()
{
char s[] = "\\?\bac#dos&ven_bb&prod_open-v&rev_5001#1&7f6ac24&0&353020304346333030363338#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}";
char s1[] = {0};
printf("OUtput string is : ");
for(int i = 0; s[i] != '{'; i++)
{
if(s[i] != '\\' && s[i] != '?')
{
int j = 0;
if(s[i] == '#')
{
s1[j] = '\\';
continue;
}
s1[j] = s[i];
j++;
}
}
for(int i = 0; s1[i] != '\0'; i++)
{
cout<<s1[i];
}
getch();
}
我建議考慮使用std::string::replace()
函數。 有很多在線文檔。 看一下std::string
必須提供的其他一些功能,因為它們也可能有用。 如果您使用的是c ++,通常最好使用std::string
來修補char
數組和索引。
注意j
的固定范圍。 在您的版本中,您始終分配給s1[0]
。
for(int i = 0, j = 0; s[i] != '{'; i++)
{
if(s[i] != '\\' && s[i] != '?')
{
// int j = 0;
if(s[i] == '#')
{
s1[j] = '\\';
}
else
{
s1[j] = s[i];
}
j++;
}
}
另一件事是為新字符串分配足夠的空間。 由於您尚未指定大小char s1[] = {0};
聲明一個大小為1的數組。您需要執行以下操作:
char s1[sizeof(s)] = { 0 }; // the size of the old array, since we don't know how long the new one will be
但是,由於您標記了Q C ++,因此可以利用可動態調整大小的std::string
。
std::string s = ".......";
std::string s1;
for(int i = 0; s[i] != '{'; i++)
{
if(s[i] != '\\' && s[i] != '?')
{
if(s[i] == '#')
s1 += '\\';
else
s1 += s[i];
}
}
您的s1緩沖區需要增加,因為它現在沒有空間容納新字符串。
例如
char* s1 = calloc(strlen(s)+1,sizeof(char)); // same size should be enough, free(s1) later
calloc確保它已被\\0
終止,在您的代碼中您忘記了添加\\0
因此打印輸出行為異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.