自己练习 字符串
字符串操作 自己;练习 P53 https://www.nowcoder.com/practice/5928127cc6604129923346e955e75984?tpId=61&tqId=29517&tPage=1&ru=/kaoyan/retest/1002&qru=/ta/pku-kaoyan/question-ranking // write your code here cpp #include <iostream> #include <cstdio> #include <string> #include <cmath> using namespace std; int main(){ string str; while(cin>>str){ int strLength = str.size(); int answer = 0; for(int i=0;i< strLength;i++){ if(str[i] == '0') continue; answer += (str[i] - '0') * (pow(2,strLength - i) -1); } cout<<answer<<endl; } return 0; }
单词替换 P53 习题4.2
/* 解题思路:先将s分成各个单词,将每个单词存在向量中,然后取出向量中的元素,逐个与a比较,若相等则替换输出。 注: istream& getline ( istream &is , string &str , char delim ); 其中 istream &is 表示一个输入流,譬如cin; string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以); char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',也就是回车换行符(遇到回车停止读入)。 */ #include<iostream> #include<string> #include<vector> using namespace std; int main(){ string s,a,b; vector<string> words; //用来保存各个单词 words.push_back(""); //??? getline(cin,s); //为了接受一行带空格的字符串 cin>>a>>b; for(int i=0,j=0;i<s.size();++i){ //分割单词,这是核心。 if(s[i]!=' ') words[j] += s[i]; else{ words.push_back(""); ++j; } } for(int i=0;i<words.size();++i){ //替换 if(words[i]==a) words[i]=b; } for(int i=0;i<words.size();++i){ //输出 cout<<words[i]<<" "; } return 0; }
/** * 确实有问题 例如连续CCCCCC 用例: azure C silver C orange blue AAAA azure silver red gold CCCCC orange CCCC orange gold III BBB azure CCCCCC CCC silver 对应输出应该为: azure C silver C orange blue AAAA azure silver red gold CCCCC orange CCCC orange gold III BBB azure CCCCCC 你的输出为: azure C silver C orange blue AAAA azure silver red gold silverCC orange silverC orange gold III BBB azure silversilver 用例: CCCCCC III A BBB CCCCCC AAAA III CCCCCC A AAAA CCCC CCC AAAA gold CC CC CC A BBB AAAA CC white 对应输出应该为: CCCCCC III A BBB CCCCCC AAAA III CCCCCC A AAAA CCCC CCC AAAA gold white CC white A BBB AAAA 你的输出为: CCCCCC III A BBB CCCCCC AAAA III CCCCCC A AAAA CCCC CCC AAAA gold white white white A BBB AAAA 这里应该是OJ错了 https://www.nowcoder.com/practice/5b58a04679d5419caf62c2b238e5c9c7?tpId=61&tqId=29518&tPage=1&ru=%2Fkaoyan%2Fretest%2F1002&qru=%2Fta%2Fpku-kaoyan%2Fquestion-ranking */ #include <iostream> #include <cstdio> #include <string> using namespace std; int main(){ string str1,str2,str3; // cin>>str1; //不对 与空格停止 getline(cin,str1); getline(cin,str2); getline(cin,str3); //好像没有与PHP直接功能的函数 int found; while(true){ found = str1.find(' ' + str2+' '); if(found != string::npos){ str1.replace(found,str2.size()+2,' ' + str3 + ' '); }else break; } found = str1.find(str2); if(found == 0 && str1[str1.size()] == ' '){ str1.replace(found,str2.size(),str3); } found = str1.find(str2); if(found != string::npos && found + str2.size() + 1 == str1.size()){ str1.replace(found,str2.size(),str3); } cout << str1; return 0; }
//首字母大写 P53 //按照上个题目的模板来 CLion看着还行 但是 OJ通过率为0 (没时间的话暂略) #include<iostream> #include<string> #include<vector> using namespace std; int main(){ string s; vector<string> words; //用来保存各个单词 words.push_back(""); //??? getline(cin,s); //为了接受一行带空格的字符串 for(int i=0,j=0;i<s.size();++i){ //分割单词,这是核心。 if(s[i]!=' ' && s[i]!='\t' && s[i]!='\r' && s[i]!='\n') words[j] += s[i]; else{ words.push_back(""); ++j; } } for(int i=0;i<words.size();++i){ //替换 // cout<<words[i].at(0)<<"-"; if(words[i].at(0) >= 'a' && words[i].at(0) <= 'z') words[i].at(0) = words[i].at(0) - ('a' - 'A'); } for(int i=0;i<words.size();++i){ //输出 cout<<words[i]; if(i != words.size() - 1) cout<<" "; } return 0; }AC
#include<iostream> #include<string> using namespace std; int main(){ string s; getline(cin,s); for(int i=0;i<s.length();i++){ if(i==0) s[i]=toupper(s[i]); else{ if(s[i-1]==' '||s[i-1]=='\t'||s[i-1]=='\r'||s[i-1]=='\n') s[i]=toupper(s[i]); } } cout<<s; }AC
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int main() { char str[200] = " ";//巧妙的处理第一个 或者在下面分支写 gets(str + 1); //!!!! //如果在C/C++中,这个str应该是指向字符数组的指针gets(str+1)表示从控制台输入一个字串,放入str+1位置 for(int i = 1; i < strlen(str); i++) if((str[i-1] == ' ' || str[i-1] == '\t') && str[i] >= 'a' && str[i] <= 'z') str[i] -= 32; for(int i = 1; i < strlen(str); i++) printf("%c", str[i]); printf("\n"); return 0; }
浮点数加法 答案写的真好【666】
//写得真好 浮点数相加 /** 向string后面加多个字符 string s1 = “hello “; s1.append(4,’!’); //在当前字符串结尾添加4个字符! s1 = “hello !!!!”; 其他暂略 https://blog.csdn.net/wxn704414736/article/details/78551886 https://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8?tpId=61&tqId=29551&tPage=3&ru=/kaoyan/retest/1002&qru=/ta/pku-kaoyan/question-ranking */ #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> using namespace std; #define _for(i, a, b) for (int i = a; i < b; ++i) #define mem(a, b) memset(a, b, sizeof(a)) struct bign { int ilen; //整数部分的长度 int flen; //小数部分的长度 int in[1010]; //整数部分数字 int fn[1010]; //小数部分数字 bign() { ilen = 0, flen = 0; mem(in, 0), mem(fn, 0); } }; //让2个浮点数的小数部分长度相同 void cmp(string &a, string &b) { int lena = a.length(), lenb = b.length(); int posa = a.find('.'), posb = b.find('.'); lena -= posa, lenb -= posb; lena < lenb ? a.append(lenb - lena, '0') : b.append(lena - lenb, '0'); } //将字符串转换为大整数 bign change(string s) { bign c; int len = s.length(); int pos = s.find('.'); _for(i, 0, len) { if (i == pos) continue; i < pos ? c.in[c.ilen++] = s[pos - i - 1] - '0' : c.fn[c.flen++] = s[len - i + pos] - '0'; } return c; } //高精度a + b 这一块类似于大整数运算 bign add(bign a, bign b) { bign c; int carry = 0; //对小数部分进行处理 _for(i, 0, a.flen) { int tmp = a.fn[i] + b.fn[i] + carry; c.fn[c.flen++] = tmp % 10; carry = tmp / 10; } //对整数部分进行处理 _for(i, 0, max(a.ilen, b.ilen)) { int tmp = a.in[i] + b.in[i] + carry; c.in[c.ilen++] = tmp % 10; carry = tmp / 10; } if (carry != 0) { c.in[c.ilen++] = carry; } return c; } //输出bign void print(bign a) { //打印整数部分 for (int i = a.ilen - 1; i >= 0; --i) { printf("%d", a.in[i]); } //打印小数点 printf("."); //打印小数部分 for (int i = a.flen - 1; i >= 0; --i) { printf("%d", a.fn[i]); } printf("\n"); } int main() { string s1, s2; while (cin >> s1 >> s2) { cmp(s1, s2); bign a = change(s1), b = change(s2); print(add(a, b)); } return 0; }
//https://www.nowcoder.com/practice/f89f96ea3145418b8e6c3eb75773f65a?tpId=62&tqId=29472&tPage=2&ru=/kaoyan/retest/2002&qru=/ta/sju-kaoyan/question-ranking //将其后缀子串进行排序 容易 自己直接写出来 #include <iostream> #include <cstdio> #include <string> #include <vector> #include <algorithm> //没写此行 clion 用sort居然同归了 坑 OJ没通过 using namespace std; //bool compare(string a,string b){ // return a>b; //} int main(){ string str; vector<string> myStrings; while(cin>>str){ myStrings.clear(); for(int i=0;i<str.size();++i){ myStrings.push_back(str.substr(i)); } sort(myStrings.begin(),myStrings.end()); // sort(myStrings.begin(),myStrings.end(),compare); //反序 for(int i=0;i<myStrings.size();++i){ cout<<myStrings.at(i)<<endl; } } return 0; }