Yanıtlar:
Temel yol şudur:
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
Diğer, genellikle daha kullanışlı olan yol şudur:
printf ("Here are the first %d chars: %.*s\n", 8, 8, "A string that is more than 8 chars");
Burada uzunluğu, bir bağımsız değişkenden uzunluğu alma isteği olarak biçimdeki '*' ifadesini kullanan printf () 'ye bir int bağımsız değişkeni olarak belirtirsiniz.
Ayrıca gösterimi de kullanabilirsiniz:
printf ("Here are the first 8 chars: %*.*s\n",
8, 8, "A string that is more than 8 chars");
Bu aynı zamanda "% 8.8s" gösterimine benzer, ancak yine çalışma zamanında minimum ve maksimum uzunlukları belirlemenize olanak tanır - daha gerçekçi bir senaryoda aşağıdaki gibi:
printf("Data: %*.*s Other info: %d\n", minlen, maxlen, string, info);
POSIX belirtimi printf()
bu mekanizmaları tanımlar.
-
belirtilen tam uzunluğa ulaşmak için boş doldurulacaktır (a eklemediğiniz sürece solda ).
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
% 8s, minimum 8 karakterlik bir genişlik belirler. 8'de kesmek istiyorsunuz, bu yüzden% .8s kullanın.
Her zaman tam olarak 8 karakter yazdırmak istiyorsanız,% 8.8s kullanabilirsiniz.
Sabit miktarda karakter belirtmenin yanı sıra, şunu da kullanabilirsiniz: *
printf, karakter sayısını bir bağımsız değişkenden alır:
#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;
}
Baskılar:
message: 'Hel'
message: 'Hel'
message: 'Hello'
printf
Yapabilirsin kullanarak
printf("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
C ++ kullanıyorsanız, STL'yi kullanarak aynı sonucu elde edebilirsiniz:
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;
Veya daha az verimli:
cout << "Here are the first 8 chars: " <<
string(s.begin(), s.begin() + 8) << endl;
ostream_iterator<char>(cout)
! Bunun yerine kullanın ostreambuf_iterator<char>(cout)
! Performanstaki fark oldukça büyük olmalıdır.
std::cout.write(s.data(), 8)
. Veya modern C ++ 'da std::cout << std::string_view{s.data(), 8}
.
İlk dört karakteri yazdırın:
printf("%.4s\n", "A string that is more than 8 chars");
Daha fazla bilgi için bu bağlantıya bakın (.precision -section'ı kontrol edin)
C ++ 'da kolaydır.
std::copy(someStr.c_str(), someStr.c_str()+n, std::ostream_iterator<char>(std::cout, ""));
DÜZENLEME: Bunu dize yineleyicileriyle kullanmak daha güvenlidir, böylece sondan kaçmazsınız. Çok kısa olan printf ve string ile ne olduğundan emin değilim, ama sanırım bu daha güvenli olabilir.
std::cout << someStr.substr(0,8);
çok daha açık.
C ++ 'da bunu şu şekilde yapıyorum:
char *buffer = "My house is nice";
string showMsgStr(buffer, buffer + 5);
std::cout << showMsgStr << std::endl;
Lütfen bunun güvenli olmadığını unutmayın, çünkü ikinci bağımsız değişkeni geçerken dizenin boyutunun ötesine geçebilir ve bir bellek erişim ihlali oluşturabilirim. Bundan kaçınmak için kendi çekinizi uygulamanız gerekir.