Inhalt:
#include <string>
using namespace std;
int main(void)
{
string hallo("Hallo"), welt("Welt!");
string hw;
hw = hallo;
hw += " " + welt;
cout << hw << endl;
Ausgabe:
Hallo Welt!
cout << "Name eingeben: ";
cin >> hw;
cout << hallo + " " + hw << endl;
Ausgabe:
Name eingeben: Hubert
Hallo Hubert
for(int i=0; i < hw.length(); i++) {
cout << "<" << hw[i] << ">";
}
Ausgabe:
<H><u><b><e><r><t>
for(int i=welt.find("!"); i>0; i--) {
welt[i] = toupper(welt[i]);
}
int l = hallo.find("l")+1;
hallo.insert(l, "-");
cout << hallo << " " << welt << endl;
Ausgabe:
Hal-lo WELT!
char *cstr = (char *)malloc(hallo.length() + 1);
if (cstr == NULL) {
cerr << "Kein Speicher mehr da!" << endl;
exit(1);
}
char *cp = cstr;
const char *sp = hallo.c_str(); // const -> Inhalt kann nicht verändert werden!
while(*sp) *cp++ = *sp++;
*cp = '\0';
cout << "C-String, kopiert: " << cstr << "\n";
free(cstr);
Ausgabe:
C-String, kopiert: Hal-lo
for (string::iterator it = hw.begin(); it < hw.end(); it++) {
cout << "(" << *it << ")";
}
Ausgabe:
(H)(u)(b)(e)(r)(t)
Zum Austauschen, nachvollziehen und leichterem bearbeiten ist ein speichern/lesen als Textdatei einfacher.
#include <fcntl.h>
#include <unistd.h>
int open(const char *path, int flags, mode_t mode);
ssize_t read(int d, void *buf, size_t nbytes);
ssize_t write(int d, const void *buf, size_t nbytes);
int close(int d);
#include <fcntl.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int n; /* Zahl */
int fd; /* File descriptor */
int rc; /* Return code */
n = atoi(argv[1]);
fd = open(argv[2], O_WRONLY|O_CREAT, 0755);
rc = write(fd, &n, sizeof(n));
close(fd);
(Quellcode: bin-write.cc)
% make bin-write
c++ -O2 -o bin-write bin-write.cc
% ./bin-write
Usage: ./bin-write zahl datei
% ./bin-write 17 x
Oeffne Datei x
Schreibe Zahl 17 (4 Bytes) in Datei
Schliesse Datei
% ls -l x
-rwxr-xr-x 1 feyrer wheel 4 Mar 6 15:07 x
% cat x
% od -xd x
0000000 0011 0000
00017 00000
int n; /* Zahl */ int fd; /* File descriptor */ int rc; /* Return code */ fd = open(argv[1], O_RDONLY, 0755); rc = read(fd, &n, sizeof(n)); close(fd); cout << "Gelesene Zahl: " << n << ". Hurra!" << endl;(Quellcode: bin-read.cc)
% make bin-read c++ -O2 -o bin-read bin-read.cc % ./bin-read x Oeffne Datei x Lese Zahl (4 Bytes) aus Datei Schliesse Datei Gelesene Zahl: 17. Hurra!
char txt[20]; /* Genügend Stellen */
...
sprintf(txt, "%d\n", n);
rc = write(fd, &txt, strlen(txt));
if (rc != strlen(txt)) {
perror("write");
exit(1);
}
Ausgabe:
% make txt-write
c++ -O2 -o txt-write txt-write.cc
% ./txt-write 20 x
Oeffne Datei x
Schreibe String 20
(20 Bytes) in Datei
Schliesse Datei
% ls -l x
-rwxr-xr-x 1 feyrer wheel 3 Mar 6 15:25 x
% cat x
20
% od -cdx x
0000000 2 0 \n
12338 00010
3032 000a
(Quellcode: txt-write.cc)
char txt[20]; /* Genügend Stellen */ ... rc = read(fd, &txt, sizeof(txt)); ... // String nach int konvertieren: n = atoi(txt);Ausgabe:
% ./txt-read x Oeffne Datei x Lese Zahl (4 Bytes) aus Datei Schliesse Datei Gelesene Zahl: 20. Hurra!(Quellcode: txt-read.cc)
#include <stdio.h>
FILE *fopen(const char *restrict filename, const char *restrict mode);
int fclose(FILE *stream);
size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
int fprintf(FILE *restrict stream, const char *restrict format, ...);
int fscanf(FILE *restrict stream, const char *restrict format, ... );
(mehr)
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *f; /* FILE-Pointer */
...
f = fopen(argv[2], "w");
...
rc = fprintf(f, "%d\n", n);
...
fclose(f);
(Quellcode: fprintf.cc)
% ./fprintf 123 x Oeffne Datei x Schreibe Zahl 123 in Datei Schliesse Datei
FILE *f; /* FILE-Pointer */ ... f = fopen(argv[1], "r"); ... rc = fscanf(f, "%d", &n); ... fclose(f); cout << "Gelesene Zahl: " << n << ". Hurra!" << endl;(Quellcode: fscanf.cc)
% ./fscanf x Oeffne Datei x Lese Zahl aus Datei Schliesse Datei Gelesene Zahl: 123. Hurra!
#include <iostream>
#include <fstream>
fstream::fstream( const char *filename, openmode mode );
ifstream::ifstream( const char *filename, openmode mode );
ofstream::ofstream( const char *filename, openmode mode );
void fstream::open( const char *filename, openmode mode = default_mode );
void fstream::close();
istream& istream::read( char* buffer, streamsize num );
ostream& ostream::writed( const char* buffer, streamsize num );
istream& istream::operator>>(...);
ostream& ostream::operator<<(...);
extern ostream cout;
extern istream cin;
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
...
n = atoi(argv[1]);
ofstream f(argv[2]);
f << n << endl;
f.close();
(Quellcode: ofstream.cc)
% ./ofstream 97 x Oeffne Datei x Schreibe Zahl 97 in Datei Schliesse Datei % cat x 97
ifstream f(argv[1]);
if (f.fail()) {
perror("istream");
exit(1);
}
f >> n;
f.close();
cout << "Gelesene Zahl: " << n << ". Hurra!" << endl;
(Quellcode: ifstream.cc)
% ./ifstream x Oeffne Datei x Lese Zahl aus Datei Schliesse Datei Gelesene Zahl: 97. Hurra!
Beispiel:
// create a vector of random integers
cout << "original vector: ";
vector<int> v;
for( int i = 0; i < 10; i++ ) {
int num = (int) rand() % 10;
cout << num << " ";
v.push_back( num );
}
cout << endl;
// find the first element of v that is even
vector<int>::iterator iter1 = v.begin();
while( iter1 != v.end() && *iter1 % 2 != 0 ) {
iter1++;
}
// find the last element of v that is even
vector<int>::iterator iter2 = v.end();
do {
iter2--;
} while( iter2 != v.begin() && *iter2 % 2 != 0 );
cout << "first even number: " << *iter1 << ", last even number: " << *iter2 << endl;
cout << "new vector: ";
vector<int> v2( iter1, iter2 );
for( int i = 0; i < v2.size(); i++ ) {
cout << v2[i] << " ";
}
cout << endl;
Ausgabe:
original vector: 1 9 7 9 2 7 2 1 9 8
first even number: 2, last even number: 8
new vector: 2 7 2 1 9
Beispiel:
stack<int> s;
for( int i = 0; i < 5; i++ ) {
s.push(i);
}
while( !s.empty() ) {
cout << s.top() << endl;
s.pop();
}
Beispiel:
struct strCmp {
bool operator()( const char* s1, const char* s2 ) const {
return strcmp( s1, s2 ) < 0;
}
};
...
map<const char*, int, strCmp> ages;
ages["Homer"] = 38;
ages["Marge"] = 37;
ages["Lisa"] = 8;
ages["Maggie"] = 1;
ages["Bart"] = 11;
cout << "Bart is " << ages["Bart"] << " years old" << endl;
Ergibt:
Bart is 11 years old