2014-05-10 44 views
0

是否可以打印出字符數組中的實體,以便實際上可以看到每個字符都是字符串終止符\ 0和新行\ n ...例如?打印出字符數組中的實體

咱們說一個字符串包含以下

abkdfkdfmdfier\nkdfdfkdkf\n\0 

我希望看到通過STD一切::法院

+0

你想要的輸出是什麼? – ncm

+0

給我一些時間... – ncm

+0

一切 - 包括\ 0和\ n – user2991252

回答

0

我想你應該寫一個基於舊創建一個新的字符串函數並將'\n','\0'字符更改爲"\\n","\\0"字符串。

我可能有一些錯誤,但我的主要想法是這樣的。

Ihope這有幫助。

#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
#include <malloc.h> 
#include <stdlib.h> 

char *mstr; 

void newStr(char *str){ 
    char *buf; 
    if((buf=(char*)malloc(strlen(str)+4)*sizeof(char))==NULL){ 
     printf("err in allocating buffer"); 
     getch(); 
     exit(1); 
    } 
    register unsigned int i; 
    for(i=0;i<strlen(str) & i<30000;i++){ 
     if(str[i]=='\n'){ 
     str[i]=0; 
     strcpy(buf,"\\n"); 
     strcat(buf,(char*)(str+i+1)); 
     strcat(str,buf)); 
     } 
    } 
    strcat(str,"\\0"); 
} 
void main(){ 
    clrscr(); 
    strcpy(mstr,"this is a\n test\nggg\0"); 
    printf("form1:\n%s",str); 
    newStr(str); 
    printf("\nform2:\n%s",str); 
    getch(); 
} 
+0

沒有工作 - 無論如何感謝 – user2991252

+0

您的歡迎,但我認爲這個想法是正確的,你需要改變一點點。但我的筆記本電腦中沒有任何編譯器。 – ncm

0

您需要檢查字符串中字符的ASCII碼。

for (int i=0; i<strlen(string)+1; i++) { 
    if (printable(string[i])) cout << string[i]; // If normal char like abc ' ' 123 [email protected]# 
    else { 
     int code = string[i]; 
     // i will write for '\n' for example 
     switch (code) { 
      case 0x0A : cout << "\\n"; 
         break; 
      // etc... 
     } 
    } 
} 

現在,printable(char c)將檢查ASCII值是一些可打印字符的(也檢查它們之間並不像\0\n一些特殊字符等

http://www.asciitable.com/index/asciifull.gif

http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters

0

下面是使用isprint &流格式化的溶液:

#include <cctype> 

void print_escaped(char chr) { 
    if (std::isprint(chr)) { 
     std::cout << chr; 
    } else { 
     switch(chr) { 
     case '\0': std::cout << "\\0"; break; 
     case '\r': std::cout << "\\r"; break; 
     case '\n': std::cout << "\\n"; break; 
     case '\t': std::cout << "\\t"; break; 
     default: // other non printable chars 
      std::cout << "\\x" << std::setfill('0') << std::setw(2) << std::hex << (int)chr; 
      break; 
     } 
    } 
} 

int main() { 
    std::string text = "abkdfkdfmdfier\nkdfdfkdkf\n"; 
    text.push_back('\0'); // don't use it in a raw string ! 
    text.push_back('\x03'); 
    std::for_each(text.begin(), text.end(), print_escaped); 
    std::cout << std::endl; 
} 
+0

沒有工作 – user2991252

+0

你會得到什麼? – Kiwi

+0

你需要'#包括' –