簡體   English   中英

復制字符串中的所選字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM