C語(yǔ)言編程C++旋轉(zhuǎn)字符操作串示例詳解
旋轉(zhuǎn)字符串
字符串左旋
實(shí)現(xiàn)一個(gè)函數(shù),可以左旋字符串中的k個(gè)字符。
例如:
ABCD左旋一個(gè)字符得到BCDA
ABCD左旋兩個(gè)字符得到CDAB
題前認(rèn)知:
一個(gè)字符串如果就定死了。eg:char arr[]=“dfdf”什么的那多沒(méi)意思,一點(diǎn)都沒(méi)有人機(jī)交互的感覺(jué),(雖然現(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];//每次都把首元素存起來(lái)
for (j = 0; j < len-1; j++)
{
arr[j] = arr[j + 1];
}
arr[len-1] = tmp;//把存起來(lái)的首元素放到最后一位
}
return arr;
}
int main()
{
char arr[100] = {0};
int num = 0;
while (1)
{
printf("請(qǐng)輸入想要旋轉(zhuǎn)的字符串:>");
gets(arr);
printf("請(qǐng)輸入想要左旋數(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é)果

三步翻轉(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("請(qǐng)輸入想要旋轉(zhuǎn)的字符串:>");
gets(arr);
printf("請(qǐng)輸入想要左旋數(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;
}


還有3種方法但那三種就需要很強(qiáng)的數(shù)學(xué)功底了,具體的我也看不懂他怎么證明的數(shù)學(xué)公式,就不看了。哈哈哈
判斷字符串旋轉(zhuǎn)
寫(xiě)一個(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)該知道我干啥,沒(méi)錯(cuò)我倡導(dǎo)交互,兩個(gè)字符串都是我們寫(xiě)
字符串追加判斷
(面試的時(shí)候能用庫(kù)函數(shù)就用庫(kù)函數(shù))
什么叫字符串追加判斷呢 例如asdfg這個(gè)字符串

#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);
//長(zhǎng)度不同就肯定不是旋轉(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("請(qǐng)輸入字符串:>");
gets(arr1);
printf("請(qǐng)輸入需判斷的旋轉(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é)果

以上就是C語(yǔ)言編程C++旋轉(zhuǎn)字符操作串示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言編程C++旋轉(zhuǎn)字符串的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++標(biāo)準(zhǔn)庫(kù)介紹及使用string類(lèi)的詳細(xì)過(guò)程
C++中將string封裝為單獨(dú)的類(lèi),string?類(lèi)是?C++?標(biāo)準(zhǔn)庫(kù)中的一個(gè)非常重要的類(lèi),用于表示和操作字符串,這篇文章主要介紹了C++標(biāo)準(zhǔn)庫(kù)介紹及使用string類(lèi),需要的朋友可以參考下2024-08-08
C++實(shí)現(xiàn) vector 的四則運(yùn)算
本文給大家介紹的是在C++中實(shí)現(xiàn)高效的vector四則運(yùn)算的方法的相關(guān)資料,需要的朋友可以參考下2016-07-07
vscode ssh遠(yuǎn)程連接服務(wù)器一直卡在下載 vscode server問(wèn)題解決
在使用vscode使用ssh遠(yuǎn)程連接服務(wù)器時(shí),一直卡在下載"vscode 服務(wù)器"階段,本文主要介紹了vscode ssh遠(yuǎn)程連接服務(wù)器一直卡在下載 vscode server問(wèn)題解決,感興趣的可以了解一下2025-01-01
C++賦值函數(shù)+移動(dòng)賦值函數(shù)+移動(dòng)構(gòu)造函數(shù)詳解
這篇文章主要介紹了C++賦值函數(shù)+移動(dòng)賦值函數(shù)+移動(dòng)構(gòu)造函數(shù)詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
C語(yǔ)言實(shí)現(xiàn)班級(jí)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)班級(jí)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
C語(yǔ)言修煉之路靈根孕育源流出?初識(shí)C言大道生上篇
C語(yǔ)言是一門(mén)面向過(guò)程、抽象化的通用程序設(shè)計(jì)語(yǔ)言,廣泛應(yīng)用于底層開(kāi)發(fā)。C語(yǔ)言能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。C語(yǔ)言是僅產(chǎn)生少量的機(jī)器語(yǔ)言以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的高效率程序設(shè)計(jì)語(yǔ)言2022-03-03

