Das Invertieren der Zeichenfolge wird nicht? Lesen Sie dies!

Bitte beachten Sie das Thema:

Kehrt die Wörter in einem Satz um, ohne die Interpunktion umzukehren. Ich mag z. B. Peking. Nach dem Durchlaufen der Funktion wird es: Peking. wie ich

Geben Sie eine Beschreibung ein:

Jede Testeingabe enthält 1 Testfall: Ich mag Peking. Die Länge des Eingabefalls überschreitet 100 nicht

Ausgangsbeschreibung:

 Geben Sie die umgekehrten Zeichenfolgen nacheinander aus, getrennt durch Leerzeichen

 Grund Idee:

Kehre zuerst das Ganze um und dann die Wörter;

Die Logik der beiden Umkehrungen ist dieselbe;

Nur der Anfang (Tiefstellung) ist anders.

Probleme lösen:

Da die Logik der beiden Umkehrungen gleich ist, hier eine Umkehrfunktion:

void reverse(char*left,char*right)
{
	while (left<right)
	{
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}

Ganze Umkehrung:

Übergeben Sie Parameter an die Reverse-Funktion, diese beiden Parameter sind immer noch relativ einfach zu übergeben

Die erste ist arr (die Adresse des ersten Elements des Arrays);

Der andere ist arr+strlen(arr)-1 (die Adresse des Elements am Ende des Arrays);

Wortumkehrung:

 Was in diesem Teil beachtet werden muss, ist, wie man den Anfang und das Ende eines Wortes findet

Wie in der Abbildung gezeigt, können wir zwei Variablen simulieren, eine wird am Anfang bewacht und die andere ist für das Finden der Endmarkierung verantwortlich .

Dies entspricht der Auswahl eines Wortes und der Übergabe der Position an die Umkehrfunktion.

Wiederholen Sie als Nächstes die obige Operation, bis Sie auf „\0“ stoßen.

char* cur = arr;
	while (*cur)//当*cur为\0时结束,可作为循环判定标志
	{
		char* start = cur;
		while (*cur != ' '&&*cur!='\0')
		{
			cur++;
		}
		reverse(start, cur-1);
		if(*cur!='\0')//避免跳过\0 导致死循环
			cur++;
	}

 Endgültige Antwort:

#include<stdio.h>
#include<string.h>//包含strlen()

//字符串倒置
void reverse(char*left,char*right)
{
	while (left<right)
	{
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}

int main()
{
	//输入
	char arr[100] = { 0 };
	gets(arr);//防止遇到空格停止读取
	//整体倒置
	reverse(arr,arr+strlen(arr) - 1);
	//单词倒置
	char* cur = arr;
	while (*cur)
	{
		char* start = cur;
		while (*cur != ' '&&*cur!='\0')
		{
			cur++;
		}
		reverse(start, cur-1);
		if(*cur!='\0')
			cur++;
	}
	//输出
	printf("%s\n", arr);
	return 0;
}

Wenn Sie denken, dass dieser Artikel gut und hilfreich für Sie ist, willkommen bei Sanlian! ! !

Guess you like

Origin blog.csdn.net/Claffic/article/details/128259435