2017-02-10 62 views
1

我卡試圖弄清楚如何我可以通過一個字符數組循環如如何將多個字符插入c中char數組的中間?

char line[50] = "this is a string"; 

,每次

line[counter] == ' '; 

因此生成字符串添加額外的空間,所有的空間是兩倍長。

+2

最簡單的方法可能是創建另一個數組並在那裏寫結果。 –

+1

您必須在每個循環步驟中明確插入空格並在該空格之後移動所有字符。當然你可以在做時使用臨時拷貝。 – Shiping

+0

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建最小,完整和可驗證示例。 – Olaf

回答

1

首先,您應該計算空白字符的數量,然後向後複製字符串。

例如

#include <stdio.h> 

int main(void) 
{ 
    char s[50] = "this is a string"; 

    puts(s); 

    size_t n = 0; 
    char *p = s; 

    do 
    { 
     if (*p == ' ') ++n; 
    } while (*p++); 

    if (n != 0) 
    { 
     char *q = p + n; 

     while (p != s) 
     { 
      if (*--p == ' ') *--q = ' '; 
      *--q = *p; 
     } 
    } 

    puts(s); 

    return 0; 
} 

程序輸出是

this is a string 
this is a string 

更有效的方法是下述

#include <stdio.h> 

int main(void) 
{ 
    char s[50] = "this is a string"; 

    puts(s); 

    size_t n = 0; 
    char *p = s; 

    do 
    { 
     if (*p == ' ') ++n; 
    } while (*p++); 

    for (char *q = p + n; q != p;) 
    { 
     if (*--p == ' ') *--q = ' '; 
     *--q = *p; 
    } 

    puts(s); 

    return 0; 
} 
0

這裏使用另一個字符串的溶液:

#include <stdio.h> 

int main(void) { 
    char line[50] = "this is a string"; 
    char newline[100]; //the new string, i chose [100], because there might be a string of 50 spaces 
    char *pline = line; 
    char *pnewline = newline; 
    while (*pline != NULL) { //goes through every element of the string 
    *pnewline = *pline; //copies the string 
    if (*pline == ' ') { 
     *(++pnewline) = ' '; //adds a space 
    } 
    pline++; 
    pnewline++; 
    } 
    printf("%s", line); 
    printf("%s", newline); 
    return 0; 
} 

如果你不想使用內存,你可以使用動態內存分配和free()「臨時」字符串。我現在沒有這樣做,因爲你使用了一個數組。

相關問題