欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言編程C++旋轉(zhuǎn)字符操作串示例詳解

 更新時(shí)間:2021年09月28日 10:12:20   作者:小碼農(nóng)UU  
這篇文章主要為大家介紹了C語言編程中C++旋轉(zhuǎn)字符操作串示例詳解,文中附含詳細(xì)圖文示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助

旋轉(zhuǎn)字符串

字符串左旋

實(shí)現(xiàn)一個(gè)函數(shù),可以左旋字符串中的k個(gè)字符。

例如:

ABCD左旋一個(gè)字符得到BCDA

ABCD左旋兩個(gè)字符得到CDAB

題前認(rèn)知:

一個(gè)字符串如果就定死了。eg:char arr[]=“dfdf”什么的那多沒意思,一點(diǎn)都沒有人機(jī)交互的感覺,(雖然現(xiàn)在人機(jī)交互適合個(gè)體,不適合集群,但也是比死板的定死字符串舒服)

所以字符串得是我們可輸入的,才有可玩性,玩的不盡性就循環(huán)

暴力移位:

#include<stdio.h>
#include<string.h>
char* turn_left(char* arr, int num)
{
	int len = strlen(arr);
	int i = 0;
	//左旋數(shù)是多少就進(jìn)行幾次移位
	for (i = 0; i < num; i++)
	{
		//每次移位就是單次左旋
		int j = 0;
		char tmp = arr[0];//每次都把首元素存起來
		for (j = 0; j < len-1; j++)
		{			
			arr[j] = arr[j + 1];			
		}
		arr[len-1] = tmp;//把存起來的首元素放到最后一位
	}
	return arr;
}
int main()
{
	char arr[100] = {0};
	int num = 0;
	while (1)
	{
		printf("請輸入想要旋轉(zhuǎn)的字符串:>");
		gets(arr);
		printf("請輸入想要左旋數(shù):>");
		scanf("%d", &num);
		getchar();//這個(gè)的作用是清空緩沖區(qū),因?yàn)槊看蝧canf會(huì)有一個(gè)\n,不清空的話
		//下一次到了gets,他會(huì)認(rèn)為\n是我們打進(jìn)去的,所以scanf之后必須清空緩沖區(qū)
		printf("左旋字符串為:%s\n", turn_left(arr, num));
	}
	return 0;
}

輸出結(jié)果

image-20210909232922661

三步翻轉(zhuǎn):

#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* head, char* tail) //字符串逆序
{
	assert(head && tail);//斷言阻止空指針
	char tmp = 0;
	char* ptmp = &tmp;
	while (head<tail)
	{
		tmp = *head;
		*head = *tail;
		*tail = tmp;
		head++;
		tail--;
	}
	return 0;
}
char* turn_left(char* arr, int num)
{
	assert(arr);
	int len = strlen(arr);
	if (len)
	{
		int n = num % len;           //防止num會(huì)越界操作,所以必須是num模len才可,還要保證len不為0
		reverse(arr, &arr[n - 1]);          //逆序左邊
		reverse(&arr[n], &arr[len - 1]);  //逆序右邊
		reverse(arr, &arr[len - 1]);      //逆序整體
		return arr;
	}
	else
	{
		return arr;
	}
}
int main()
{
	char arr[100] = {0};
	int num = 0;
	while (1)
	{
		printf("請輸入想要旋轉(zhuǎn)的字符串:>");
		gets(arr);
		printf("請輸入想要左旋數(shù):>");
		scanf("%d", &num);
		getchar();//這個(gè)的作用是清空緩沖區(qū),因?yàn)槊看蝧canf會(huì)有一個(gè)\n,不清空的話
		//下一次到了gets,他會(huì)認(rèn)為\n是我們打進(jìn)去的,所以scanf之后必須清空緩沖區(qū)
		printf("左旋字符串為:%s\n", turn_left(arr, num));
	}
	return 0;
}

image-20210910003317406

image-20210910100918779

還有3種方法但那三種就需要很強(qiáng)的數(shù)學(xué)功底了,具體的我也看不懂他怎么證明的數(shù)學(xué)公式,就不看了。哈哈哈

判斷字符串旋轉(zhuǎn)

寫一個(gè)函數(shù),判斷一個(gè)字符串是否為另外一個(gè)字符串旋轉(zhuǎn)之后的字符串。

例如:給定s1 =AABCD和s2 = BCDAA,返回1

給定s1=abcd和s2=ACBD,返回0.

AABCD左旋一個(gè)字符得到ABCDA

AABCD左旋兩個(gè)字符得到BCDAA

AABCD右旋一個(gè)字符得到DAABC

題前認(rèn)知

大家現(xiàn)在應(yīng)該知道我干啥,沒錯(cuò)我倡導(dǎo)交互,兩個(gè)字符串都是我們寫

字符串追加判斷

(面試的時(shí)候能用庫函數(shù)就用庫函數(shù))

什么叫字符串追加判斷呢 例如asdfg這個(gè)字符串

image-20210913231753342

#include<stdio.h>
#include<string.h>
#include<assert.h>
int is_left_move(char* str1, char* str2)
{	
	assert(str1 && str2);
	int len1 = strlen(str1);
	int len2 = strlen(str2);
	//長度不同就肯定不是旋轉(zhuǎn)字符串
	if (len1 - len2)
		return 0;
	//在arr1字符串中追加一個(gè)自己
	strncat(str1, str1, len1);
	//判斷判斷的那個(gè)字符串是不是追加字符串的子串
	char* ret = strstr(str1, str2);
	if (ret == NULL)
		return 0;
	else
		return 1;
}
int main()
{
	char arr1[50] = {0};//有足夠的空間
	char arr2[50] = {0};
	while (1)
	{
		printf("請輸入字符串:>");
		gets(arr1);
		printf("請輸入需判斷的旋轉(zhuǎn)字符串:>");
		gets(arr2);
		int ret = is_left_move(arr1, arr2);
		if (ret == 1)
		{
			printf("是旋轉(zhuǎn)字符串\n");
		}
		else
		{
			printf("不是旋轉(zhuǎn)字符串\n");
		}
	}	
	return 0;
}

結(jié)果

image-20210913231922969

以上就是C語言編程C++旋轉(zhuǎn)字符操作串示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C語言編程C++旋轉(zhuǎn)字符串的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++ Qt開發(fā)之PushButton按鈕組件的使用詳解

    C++ Qt開發(fā)之PushButton按鈕組件的使用詳解

    Qt 是一個(gè)跨平臺(tái)C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺(tái)窗體應(yīng)用程序,本文將重點(diǎn)介紹QPushButton按鈕組件的常用方法及靈活運(yùn)用,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-12-12
  • C++實(shí)現(xiàn)LeetCode(33.在旋轉(zhuǎn)有序數(shù)組中搜索)

    C++實(shí)現(xiàn)LeetCode(33.在旋轉(zhuǎn)有序數(shù)組中搜索)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(33.在旋轉(zhuǎn)有序數(shù)組中搜索),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言中strlen()函數(shù)的使用詳解

    C語言中strlen()函數(shù)的使用詳解

    strlen函數(shù)是用來求字符串長度的函數(shù),這個(gè)函數(shù)遇到‘\0’就會(huì)停止,且這個(gè)長度不包含‘\0’,這篇文章給大家介紹了C語言中strlen()函數(shù)的使用,感興趣的朋友一起看看吧
    2024-02-02
  • Qt編寫地圖之實(shí)現(xiàn)經(jīng)緯度坐標(biāo)糾偏

    Qt編寫地圖之實(shí)現(xiàn)經(jīng)緯度坐標(biāo)糾偏

    地圖應(yīng)用中都涉及到一個(gè)問題就是坐標(biāo)糾偏的問題,這個(gè)問題的是因?yàn)楦鶕?jù)地方規(guī)則保密性要求不允許地圖廠商使用標(biāo)準(zhǔn)的GPS坐標(biāo),而是要用國家定義的偏移標(biāo)準(zhǔn)。本文將詳細(xì)講解如何在Qt中實(shí)現(xiàn)經(jīng)緯度坐標(biāo)糾偏,需要的可以參考一下
    2022-03-03
  • OpenCV實(shí)現(xiàn)更改圖片顏色功能

    OpenCV實(shí)現(xiàn)更改圖片顏色功能

    這篇文章主要為大家詳細(xì)介紹了如何利用OpenCV實(shí)現(xiàn)更改圖片顏色的功能,文中代碼介紹詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C++實(shí)現(xiàn)list增刪查改模擬的示例代碼

    C++實(shí)現(xiàn)list增刪查改模擬的示例代碼

    本文主要介紹了C++實(shí)現(xiàn)list增刪查改模擬,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • 基于C++實(shí)現(xiàn)的各種內(nèi)部排序算法匯總

    基于C++實(shí)現(xiàn)的各種內(nèi)部排序算法匯總

    這篇文章主要介紹了基于C++實(shí)現(xiàn)的各種內(nèi)部排序算法,非常經(jīng)典,需要的朋友可以參考下
    2014-08-08
  • c++如何實(shí)現(xiàn)歸并兩個(gè)有序鏈表

    c++如何實(shí)現(xiàn)歸并兩個(gè)有序鏈表

    這篇文章主要介紹了c++如何實(shí)現(xiàn)歸并兩個(gè)有序鏈表,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 解析Linux下的時(shí)間函數(shù):設(shè)置以及獲取時(shí)間的方法

    解析Linux下的時(shí)間函數(shù):設(shè)置以及獲取時(shí)間的方法

    本篇文章是對Linux下的時(shí)間函數(shù):設(shè)置以及獲取時(shí)間的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實(shí)現(xiàn)猜數(shù)字小項(xiàng)目

    C語言實(shí)現(xiàn)猜數(shù)字小項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語實(shí)現(xiàn)猜數(shù)字小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論