簡體   English   中英

打印出char數組中的實體

[英]Print out entities in a char array

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

假設一個字符串包含以下內容

 abkdfkdfmdfier\nkdfdfkdkf\n\0

我想通過std :: cout查看所有內容

我認為您應該編寫一個函數,該函數根據舊的字符串創建一個新字符串,並將'\\n','\\0'字符更改為"\\\\n","\\\\0"字符串。

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

我希望這有幫助。

#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();
}

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

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

現在, printable(char c)將檢查ascii值是否為某些可打印的chars(並且還檢查其中是否不是某些特殊的char,例如\\0\\n等)。

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

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

這是使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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