在char数组中打印实体

时间:2014-05-10 06:52:48

标签: c++ arrays char

是否可以在char数组中打印出实体,这样可以实际看到每个字符串终止符\ 0和新行\ n ...等字符?

假设一个字符串由以下

组成
 abkdfkdfmdfier\nkdfdfkdkf\n\0

我想通过std :: cout

查看所有内容

3 个答案:

答案 0 :(得分:0)

我认为您应该编写一个基于旧字符串创建新字符串的函数,并将'\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();
}

答案 1 :(得分:0)

您需要检查字符串中字符的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值是否是某些可打印的字符(并且还检查它们中是否不是某些特殊字符,如\0\n等。

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

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

答案 2 :(得分:0)

以下是使用isprint&amp;的解决方案流格式化程序:

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