字串的簡單處理 nyoj525

來源:互聯網
上載者:User

今天LZQ在玩一種小遊戲,但是這遊戲數有一點點的大,他一個人玩的累,想多拉一些人進來幫幫他,你能寫一個程式幫幫他嗎?這個遊戲是這樣的:有一行數字,如果我們把這行數字中的‘5’都看成空格,那麼就得到一行用空格分割的若干非負整數(可能有些整數以‘0’開頭,這些頭部的‘0’應該被忽略掉,除非這個整數就是由若干個‘0’組成的,這時這個整數就是0)。
你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出,大家趕緊寫個程式來幫幫LZQ吧!

輸入
輸入包含多組測試案例,每組輸入資料只有一行數字(數字之間沒有空格),這行數位長度不大於5000。

輸入資料保證:分割得到的非負整數不會大於100000000;如果有輸入資料全為5,則輸出0。

輸出
對於每個測試案例,輸出分割得到的整數排序的結果,相鄰的兩個整數之間用一個空格分開,每組輸出佔一行。

範例輸入
0051231232050775
範例輸出
0 77 12312320
此題可用sscanf解決,再次溫習了sscanf的用法,同時又瞭解了strtok的用法,
AC代碼
#include<iostream>#include<stdio.h>#include<cstring>#include<string>#include<algorithm>using namespace std;char str[5005];int  a[5005];int main(){ while(scanf("%s",str)!=EOF) {  int j,i=0,len=strlen(str),k=0,num;  for(i=0;i<len;++i)  if(str[i]=='5') str[i]=' ';  i=0;  for(j=0;j<len;++j)  if(str[j]!=' ')  {   sscanf(str+j,"%i%n",&a[k++],&num);     //%表示為選擇 i為選擇條件,整型,n為選擇的個數,同時應該注意轉換的字元包括\0.   j=j+num;  }  sort(a,a+k);  if(k==0) printf("0\n");  for(int q=0;q<k;++q)  printf("%d ",a[q]);  printf("\n"); } //system("pause"); return 0;}

strtok的用法,摘自百度百科~

範例程式碼:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
 char sentence[]="This is a sentence!";
 cout<<sentence<<endl;
 char *ptr=strtok(sentence," ");
 while(ptr!=NULL)
 {
  cout<<ptr<<endl;
  ptr=strtok(NULL," ");
 }
 system("pause");
 return 0;
}

  函數第一次調用需設定兩個參數。第一次分割的結果,返回串中第一個 ',' 之前的字串,也就是上面的程式第一次輸出this。

  第二次調用該函數strtok(NULL,","),第一個參數設定為NULL。結果返回分割依據後面的字串,即第二次輸出is。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.