是否可以在char数组中打印出实体,这样可以实际看到每个字符串终止符\ 0和新行\ n ...等字符?
假设一个字符串由以下
组成 abkdfkdfmdfier\nkdfdfkdkf\n\0
我想通过std :: cout
查看所有内容答案 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;
}