C: strings/Kommandozeilenargumente

Neue Frage »

Auf diesen Beitrag antworten »
Lars C: strings/Kommandozeilenargumente

Meine Frage:
Hab die Aufgabe mal im Anhang hochgeladen.

Meine Ideen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) 
{
	int i;
	int s;
	int v=0;
	int t=0;

   for(i=1; i < argc; i++) 
   	{
	 	printf("Argument %d: %s ", i, argv[i]);
	 	char* p=argv[i];
		do
		{
		if(t!=0)p++;
		if(*p=='a','A','e','E','i','I','o','O','u','U')v++;
		if(*p=='\0')printf("hat %i Zeichen, davon %i Vokale\n",s,v);
		s++;
		t++;
		}while(*p!='\0');
	}
   return EXIT_SUCCESS;
}

Ich hab imo keine wirkliche Ahnung, warum das mit dem Zählen nicht funktioniert (das mit den Vokalen kann ich so gar nicht schreiben schätze ich, gibt's dafür ne andere Möglichkeit?)
Wir hatten das nur in der Vorlesung und nicht im Tutorium und inner Vorlesung hatte ich die Grundlage verstanden, aber imo wills nicht klappen.
 
Auf diesen Beitrag antworten »
eulerscheZahl

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
#include <stdio.h>

int main(int argc, char* argv[]) {
	int i;
	int vokale;
	int zeichen;
	char* p;
	
	for (i = 1; i < argc; i++) {
		printf("Argument %d: %s ", i, argv[i]);
		p = argv[i];
		vokale = 0; //zurücksetzen für jedes Wort
		zeichen = 0;
		while (*p != '\0') {
			if (*p == 'A' || *p == 'E' || *p == 'I' || *p == 'O' || *p == 'U' ||
				*p == 'a' || *p == 'e' || *p == 'i' || *p == 'o' || *p == 'u') {
				vokale++;
			}
			zeichen++;
			p++;
		}
		printf("hat %i Zeichen, davon %i Vokale\n", zeichen, vokale);
	}
}
Auf diesen Beitrag antworten »
Lars

Alles klar, das mit den || hab ich danach auch so gemacht, habs jetzt auch richtig, aber dein code ist bei weitem einfacher gehalten, danke dir.
Auf diesen Beitrag antworten »
Lars

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
#include <stdio.h>

int main(int argc, char* argv[]) {
	int i;
	int n=0;
	int vokale;
	int zeichen;
	char* p;
	char* rauf;
	char* runter;
	
	for (i = 1; i < argc; i++) 
	{
		printf("Argument %d: %s ", i, argv[i]);
		p = argv[i];
		rauf = argv[i];
		vokale = 0; 
		zeichen = 0;
		while (*p != '\0') 
		{
			if (*p == 'A' || *p == 'E' || *p == 'I' || *p == 'O' || *p == 'U' ||
				*p == 'a' || *p == 'e' || *p == 'i' || *p == 'o' || *p == 'u') 
				{
				vokale++;
				}
			zeichen++;
			p++;
		}
	printf("hat %i Zeichen, davon %i Vokale ", zeichen, vokale);
	while(*rauf!='\0')
	{
		runter=rauf;
		rauf++;
		n++;
	}
	for(n;n>0;n--)
	{
		printf("%c",*runter);
		runter--;
	}
	printf("\n");
	}
}

Hab das mal vervollständigt, danke nochmal.
 
Auf diesen Beitrag antworten »
eulerscheZahl

Hier meine Version:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
#include <stdio.h>

int main(int argc, char* argv[]) {
	int i;
	int vokale;
	int zeichen;
	char* p;
	
	for (i = 1; i < argc; i++) {
		printf("Argument %d: %s ", i, argv[i]);
		p = argv[i];
		vokale = 0; //zurücksetzen für jedes Wort
		zeichen = 0;
		while (*p != '\0') {
			if (*p == 'A' || *p == 'E' || *p == 'I' || *p == 'O' || *p == 'U' ||
				*p == 'a' || *p == 'e' || *p == 'i' || *p == 'o' || *p == 'u') {
				vokale++;
			}
			zeichen++;
			p++;
		}
		printf("hat %i Zeichen, davon %i Vokale ", zeichen, vokale);
		do {
			p--;
			printf("%c", *p);
		} while (p != argv[i]);
		printf("\n");
	}
}
Auf diesen Beitrag antworten »
Lars

Is noch besser, bin ich gar net drauf gekommen smile .
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »