有没有办法指定一个string使用printf()打印出多less个字符?
有没有办法指定一个string打印出多less字符(类似于int
s中的小数位)?
printf ("Here are the first 8 chars: %s\n", "A string that is more than 8 chars");
想要打印: Here are the first 8 chars: A string
基本的方法是:
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
另一个通常更有用的方法是:
printf ("Here are the first %d chars: %.*s\n", 8, 8, "A string that is more than 8 chars");
在这里,您将length指定为printf()的int参数,该参数将格式中的“*”视为从参数获取长度的请求。
您也可以使用符号:
printf ("Here are the first 8 chars: %*.*s\n", 8, 8, "A string that is more than 8 chars");
这也类似于“%8.8s”表示法,但是也允许您在运行时指定最小和最大长度 – 在以下情况下更加实际:
printf("Data: %*.*s Other info: %d\n", minlen, maxlen, string, info);
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
%8s将指定最less8个字符的宽度。 你想在8截断,所以使用%.8s。
如果你想总是打印8个字符,你可以使用%8.8s
使用printf
你可以做
printf("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
如果您使用C ++,则可以使用STL获得相同的结果:
using namespace std; // for clarity string s("A string that is more than 8 chars"); cout << "Here are the first 8 chars: "; copy(s.begin(), s.begin() + 8, ostream_iterator<char>(cout)); cout << endl;
或者,效率较低:
cout << "Here are the first 8 chars: " << string(s.begin(), s.begin() + 8) << endl;
打印前四个字符:
printf("%.4s\n", "A string that is more than 8 chars");
查看此链接了解更多信息(请查阅.precision -section)
除了指定固定数量的字符外,还可以使用*
表示printf从参数中获取字符的数量:
#include <stdio.h> int main(int argc, char *argv[]) { const char hello[] = "Hello world"; printf("message: '%.3s'\n", hello); printf("message: '%.*s'\n", 3, hello); printf("message: '%.*s'\n", 5, hello); return 0; }
打印:
message: 'Hel' message: 'Hel' message: 'Hello'
的printf(….. “%。787-8”)
在C ++中很容易。
std::copy(someStr.c_str(), someStr.c_str()+n, std::ostream_iterator<char>(std::cout, ""));
编辑:这与string迭代器一起使用也是比较安全的,所以你不会跑到最后。 我不确定printf和string会发生什么,但是我猜这可能会更安全。
在C ++中,我这样做:
char *buffer = "My house is nice"; string showMsgStr(buffer, buffer + 5); std::cout << showMsgStr << std::endl;
请注意,这是不安全的,因为当传递第二个参数时,我可以超出string的大小并生成内存访问冲突。 你必须执行你自己的检查来避免这种情况。