pta刪除重復(fù)字符 C語(yǔ)言,移動(dòng)字符串?
C語(yǔ)言,移動(dòng)字符串?C語(yǔ)言字符串移動(dòng)輸入一個(gè)字符串和一個(gè)非負(fù)整數(shù)n,要求字符串循環(huán)向左移動(dòng)n次。輸入格式:輸入長(zhǎng)度不超過(guò)100個(gè)字符的非空字符串,第一行以回車結(jié)束;第二行給出非負(fù)整數(shù)n。輸出格式:在一
C語(yǔ)言,移動(dòng)字符串?
C語(yǔ)言字符串移動(dòng)
輸入一個(gè)字符串和一個(gè)非負(fù)整數(shù)n,要求字符串循環(huán)向左移動(dòng)n次。
輸入格式:
輸入長(zhǎng)度不超過(guò)100個(gè)字符的非空字符串,第一行以回車結(jié)束;第二行給出非負(fù)整數(shù)n。
輸出格式:
在一行中左移n次后輸出字符串。
輸入示例:
你好,世界
!2
輸出示例:
世界!他
在PTA上運(yùn)行以下代碼,邊界測(cè)試的結(jié)果表明運(yùn)行時(shí)有錯(cuò)誤
#include<stdio。H>
#包含<string。H>
int main()
{
char a[100],change
int i,J,CNT,n
]獲?。╝)
scanf(%d“,&;amp;n)
CNT=strlen(a)
for(J=0j<nj)
{
change=a[0
]for(i=0i<cnt-1i)
{
a[i]=a[i 1
]}
a[i]=change
}
puts(a)
return 0
}
如果使用01字符串表示二進(jìn)制,MATLAB有現(xiàn)成的circshift函數(shù)可用。方法如下:
circshift(a“,-n)”
只需Bai輸入二進(jìn)制字符串a(chǎn)和Du需要左移的數(shù)字n即可得到答案。例如:]>> a=“10011110”n=1循環(huán)移位(a”,-n)“
ans=
00111101
>> a=“10011110”n=2循環(huán)移位(a”,-n)“
ans=
011111010
>> a=“10011110”n=3循環(huán)移位(a”,-n)“
ans=
11110100
> a=“10011110”n=4循環(huán)移位(a”,-n) “
ans=
11101001
circshift如果函數(shù)本身的第二個(gè)參數(shù)是常規(guī)右移,如果是負(fù)數(shù),則為左移。而且可以用來(lái)移動(dòng)矩陣的任何維數(shù),不是你問(wèn)的問(wèn)題,不是你說(shuō)的。
如果不使用01字符串,而是使用自己數(shù)值的內(nèi)部二進(jìn)制形式,則有兩種方法。一種是使用DEC2BIN函數(shù)將其轉(zhuǎn)換為二進(jìn)制字符串,在左側(cè)添加0以擴(kuò)展到所需的位數(shù),然后使用上面的circshift函數(shù)。
另一種方法是使用bitshift函數(shù),但您需要判斷數(shù)據(jù)類型的長(zhǎng)度,是否有符號(hào),以及最高位是1還是0,這稍微復(fù)雜一些。通常,它可以與fi函數(shù)相結(jié)合來(lái)簡(jiǎn)化這些問(wèn)題。您可以查看bitshift和fi函數(shù)的文檔。
matlab中,怎么樣實(shí)現(xiàn)二進(jìn)制數(shù)的,循環(huán)左移 ? 例如:對(duì)于二進(jìn)制數(shù):01000111循環(huán)左移2位后變成:00011101?
For(I=0I<strlen(a)I){//嵌套循環(huán),循環(huán)一個(gè)數(shù)組,依次取a的元素,然后匹配以元素開(kāi)頭的字符串是否與數(shù)組B的相同//如果元素開(kāi)頭與數(shù)組B的相同,則子j循環(huán)結(jié)束,標(biāo)志為1,//然后下面的C循環(huán)通過(guò)元素移位從數(shù)組中刪除相應(yīng)的字符。最后剩下的就是你想要的。//Put(a)為(J=0j<strlen(b)J){if(a[ij]==b[J])flag=1 else flag=0}if(flag==1){for(C=IC<strlen(a)C)a[C]=a[C strlen(b)]}puts(a)打印移位刪除后的剩余內(nèi)容