[英]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.