c++ string类注意事项与使用 PAT B1002写出这个数

  1. c++中的string类与c中的string.h头文件的函数不一样,< string >更多的是将字符串看成对象来处理。

  2. 注意
    2.1 string对象只能用cin输入和cout输出,不能用scanf和printf输入输出!!非要想不开要用的话可以通过c_str() 的方法将string对象转换成字符数组来输出。

	string str="abcd";
	printf("%s\n",str.c_str());
  1. 访问字符串中元素方式
    (1)通过下标即可访问

    str[i]
    

    (2)通过迭代器访问
    许多字符串有关函数需要传入的参数是迭代器类型,所以string的迭代器访问很重要。
    迭代器的创建 string::iterator这个·是完整的类型名。

    string::iterator it;
    

    访问过程:
    用for循环遍历 迭代器可以看成专门用于有顺序的数据结构的专用指针,所以可以通过 * 迭代器来取迭代器中的元素。

    for(string::iterator it =str.begin();it!=str.end();it++){
    		printf("%d",*it);
    }
    
  2. 常用函数功能
    (1)支持“+”将两个字符串拼接
    (2)两个string类型可以直接用==、!= 、<、>来比较
    (3)str.insert(pos,string) ;intseert(it1,it2.begin,it2.end);it1,it2都为迭代器类型
    (4)erase(it) ; erase(first,last); erase(pos,length);
    (5)str.substr(pos,len)返回从pos号位开始、长度为len的子串。
    (6)str.find(str2),党str2是tr子串时,返回其在str中第一次出现的位置。str.find(str2,pos),从str的pos号位开始匹配str2,返回值与上相同。
    (7) string::npos是一个常数通常为-1或4294967295,不用管这个常数是什么,需要知道的是string::npos就是表示查找失败时的返回值。
    (8)str.replace(pos,len,str2)把从str从pos号位开始、长度为len的子串替换为str2.str.replace(it1,it2,str2),把[it1,it2)迭代器所指向的范围替换为str2。

  3. 例题 PAT B1002 写出这个数

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 ​​ 10^100。

输出格式: 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例: 1234567890987654321123456789
输出样例: yi san wu

测试代码:

#include<iostream>
#include<string>

using namespace std;

int main(){
    string str,result;
    cin>>str;
    int sum;
    for(string::iterator it=str.begin();it!=str.end();it++){
        sum+=(*it-'0');
    }
    result=to_string(sum);
    char ch;
    for(int i=0;i<result.length()-1;i++){
        ch=result[i];
        switch (ch)
        {
        case '1':
            cout<<"yi ";
            break;
         case '2':
            cout<<"er ";
            break;
         case '3':
            cout<<"san ";
            break;
         case '4':
            cout<<"si ";
            break;
         case '5':
            cout<<"wu ";
            break;
         case '6':
            cout<<"liu ";
            break;
         case '7':
            cout<<"qi ";
            break;
         case '8':
            cout<<"ba ";
            break;
         case '9':
            cout<<"jiu ";
            break;
         case '0':
            cout<<"ling ";
            break;
        default:
            break;
        }
        
    }
    ch=result[result.length()-1];
           switch (ch)
        {
        case '1':
            cout<<"yi";
            break;
         case '2':
            cout<<"er";
            break;
         case '3':
            cout<<"san";
            break;
         case '4':
            cout<<"si";
            break;
         case '5':
            cout<<"wu";
            break;
         case '6':
            cout<<"liu";
            break;
         case '7':
            cout<<"qi";
            break;
         case '8':
            cout<<"ba";
            break;
         case '9':
            cout<<"jiu";
            break;
         case '0':
            cout<<"ling";
            break;
        default:
            break;
        }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值