OpenJudge NOI 1.7 28:单词倒排
生活随笔
收集整理的這篇文章主要介紹了
OpenJudge NOI 1.7 28:单词倒排
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
OpenJudge NOI 1.7 28:單詞倒排
【題目考點】
1. 多字符串處理
- 方法1:string類對象數組
設string類對象數組s,s[i]保存第i個字符串。s[i]是string類對象。
- 方法2:二維數組
設二維數組s,s[i]保存第i個字符串。s[i]是char*類型指針常量,是一維字符數組。缺點是指針不可改變。
例:輸入n,輸入n個字符串
- 方法3:指針數組
設指針數組s,s[i]保存第i個字符串。s[i]是char*類型指針變量,指向一維字符數組。
使用前需要動態申請內存空間。優點是指針值可以改變。
2. 輸入不確定個數的字符串
string s; while(cin >> s) {//... }或
char s[105]; while(scanf("%s", s) != EOF)) {//... }OJ上實際是從文件輸入,文件末尾是EOF(end of file,實際是-1)。當讀到文件末尾時cin >> s會返回false,scanf("%s", s)會返回EOF,讓循環跳出。
這樣的程序在本地調試時,輸入n個數據后不會停止。此時可以按Ctrl+Z,控制臺中出現^Z后,按回車,這樣可以結束輸入,看到程序運行的結果。
【解題思路】
就輸入方式而言,可以先讀入帶空格的整行字符串,而后遍歷字符串做拆分,或直接用while(cin>>…)或while(scanf(…)!=EOF)分別讀入每個單詞。
就存儲方式而言,可以使用二維數組、指針數組,string類數組。
二者組合可以產生多種解法,以下只給出幾種示例。
【題解代碼】
解法1:讀入整行,二維數組
#include<bits/stdc++.h> using namespace std; #define N 105 int main() {char s[N];cin.getline(s, N);char word[N][N];//word[i]:第i個單詞 int len = strlen(s), wi = 0, wj = 0;//wi:word第一維下標 wj:word第二維下標 for(int i = 0; i <= len; ++i){if(s[i] == ' ' || s[i] == '\0'){word[wi++][wj] = '\0';wj = 0;}elseword[wi][wj++] = s[i];}for(int i = wi - 1; i >= 0; i--)//倒序輸出每個單詞 cout << word[i] << ' ';return 0; }解法2:分別讀入,string類數組
#include<bits/stdc++.h> using namespace std; int main() {string s[105];//s[i]:第i個單詞 int n = 0;//n:單詞個數 while(cin >> s[n])n++;for(int i = n - 1; i >= 0; i--)cout << s[i] << ' ';return 0; }解法2:分別讀入,指針數組
#include<bits/stdc++.h> using namespace std; #define N 105 int main() {char *s[N];//s[i]:第i個單詞 int n = 0;s[n] = new char[N];while(scanf("%s", s[n]) != EOF)//s[i]為char*類型 s[++n] = new char[N];delete s[n];//動態申請記得要做釋放 for(int i = n - 1; i >= 0; i--){cout << s[i] << ' ';delete s[i];}return 0; }總結
以上是生活随笔為你收集整理的OpenJudge NOI 1.7 28:单词倒排的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021沭阳中学高考成绩查询,沭阳建陵中
- 下一篇: 代码更换ui图片_不同人眼中的UI设计师