浅谈“字符串”

什么是字符串?

C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。
字符串实际上是使用 null 字符 '\0' 终止的一维字符数组。
因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

所以我们新建字符串变量时,要比实际多一个字符,确保结尾字符'\0'能被存储。

字符串变量的表示

在C语言中,使用char类型的数组,来存储字符串变量

注:C语言中,没有专用的字符串类型。

在C++中,使用std::string类型来表示字符串变量

如何创建?

#include<bits/stdc++.h>
using namespace std;

void lesson1()
{
    //C语言风格的字符串
    char c[6] = "hello";
    //char c1[7] = {'1','2','3','4','5','6'}
    cout<<c<<endl;
}
int main()
{
    lesson1();
    return 0;
}
void lesson2()
{
    string s = "abcde";
    cout<<s[2]<<endl;//输出结果为:c
}
int main()
{
    lesson1();
    return 0;
}

多个字符串如何存储?


	char c1[4][4];//这里是因为输入的是abc def 所以是c1[4][4]
	cin>>c1[0]>>c1[1];
	cout<<c1[0]<<endl<<c1[1]<<endl;

输入:abc def
输出:abc    
      def

或:
    getline(cin,s);//输入:abc def输出:abc def (空格会原封不动的输出)
    cout<<s<<endl;

例题1:翻转单词

题目描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以一个空格隔开。为简单起见,输入的句子中都不包含标点符。

输入描述:一个包含空格的字符串,表示一个英文句子(字符串的长度不超过 200200 ,且每个单词的长度不超过 5050 )。

输出描述:翻转后的句子,单词与单词间使用一个空格隔开。

输入样例 1:I am student       输出样例1:student am I

#include<bits/stdc++.h>
using namespace std; 
void lesson1()
{
    string s, a[101];
    int i, n;
    while(cin >> s)
    {
        a[n] = s;
        n++;
    }
    for (i = n - 1; i >= 0; i--)
    {
        cout << a[i] << " "; 
    }
}
int main()
{
    lesson1();
    return 0;
}
 

例题2:替换字符

题目描述:给定一个由大小写字母构成的字符串。把该字符串中特定的字符全部用字符 “#” 替换。请你输出替换后的字符串。

输入描述:输入共两行。第一行包含一个长度不超过 3030 的字符串。第二行包含一个字符,表示要替换掉的特定字符。

输出描述:输出共一行,为替换后的字符串。

输入样例 1:hello l        输出样例1:he##o

#include<bits/stdc++.h>
using namespace std; 
void les2()
{
    string s;
    int i;
    char c;
    cin>>s;
    cin>>c;
    for(i=0;i<s.size();i++)
    {
        if(s[i]==c)
            s[i]='#';
    }
    cout<<s;
}
int main()
{
    les2();
    return 0;
}

例题3:将字符串反序

题目描述:请将一个给定的字符串反序(字符长度为 11 到 1000010000,且有可能包含空格)。

输入描述:反序前的字符串。

输出描述:反序后的字符串。

输入样例 1:abcd        输出样例1:dcba

#include<bits/stdc++.h>
using namespace std; 
void les3()
{
    string s;
    getline(cin, s);
    int n=s.size();
    for(int i=n-1;i>=0;i--)
    {
        cout<<s[i];
    }
}
int main()
{
    les3();
    return 0;
}

例题4:字符串加密

题目描述:输入一个字符串,将所有字母变成它的下一字母。变换规则如下:
(1). ‘aa’ 变成 ‘bb’、’bb’ 变成 ‘cc’ \cdots⋯、’yy’ 变成 ‘zz’、’zz’ 变成 ’aa’、’AA’ 变成 ‘BB’、’BB’ 变成 ‘CC’…
(2). 其它非字母字符保持不变

输入描述:待加密的字符串(字符串中没有空格)

输出描述:加密后的密串

输入样例 1:abcdz        输出样例1:bcdea

#include<bits/stdc++.h>
using namespace std; 
void les4()
{
    string a;
    int n,i,j,x;
    //获取字符串,存入a中
    getline(cin,a);
    //将a的尺寸大小给 x
    x=a.size();
    //从0遍历到x-1
    for(i=0;i<x;i++){
        //若第i个元素在是大写字母
        if(a[i]>='A'&&a[i]<='Z'){
            //且如果a[i] == 'Z',输出时就A[I]=='A'
            if(a[i]=='Z') a[i]='A';
            //a[i]是其他值时,就+1输出
            else a[i]+=1;
        }
        else if(a[i]>='a'&&a[i]<='z'){
            if(a[i]=='z') a[i]='a';
            else a[i]+=1; 
        }
    }
    cout<<a;
}
int main()
{
    les4;
    return 0;
}

例题5:删除字符串中指定字符

题目描述:请编写程序删除字符串 ss 中指定的字符 chch。(字符串 ss 的最大长度不超过 100100)

输入描述:两行
第 11 行,字符 chch
第 22 行,字符串 ss(包含空格)

输出描述:删除 chch 后的字符串

输入样例 1:a        abcdabc        输出样例1:bcdbc

#include<bits/stdc++.h>
using namespace std; 
void les5()
{  
	int i;
	char x;
	string a;
    //获取要删除的字符x
	cin>>x;
	getline(cin,a);
	getline(cin,a);
	for(i=0;i<a.length();i++) {
		//遍历时若第i个字符等于x内的字符,跳过
        if (a[i]==x) continue;
		else cout<<a[i];
	}        
}
int main()
{
	les5();
	return 0;
}

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,可以使用scanf函数来读取字符串。在引用\[1\]中的示例代码中,使用了scanf_s函数来读取字符串。scanf_s函数的用法是scanf_s("%s", str, (unsigned int)sizeof(str)),其中str是用来存储字符串的字符数组,sizeof(str)表示str数组的大小。这样可以确保读取的字符串不会超出数组的范围。另外,在C++11中,不推荐使用scanf和gets函数,因为它们被认为是不安全的。推荐使用scanf_s和gets_s函数来读取字符串。\[2\] 另一种读取字符串的方法是使用string类。在引用\[3\]的示例代码中,使用了string类来接收字符串输入。可以使用cin对象的>>运算符来读取字符串,例如cin >> s,其中s是一个string对象。这种方法可以方便地读取包含空格的字符串。 #### 引用[.reference_title] - *1* *2* [浅谈C/C++字符串输入scanf、gets、cin、getline、getchar](https://blog.csdn.net/qq_14824921/article/details/124356747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C/C++ 中输入字符串的几种方式](https://blog.csdn.net/m0_64604482/article/details/129249732)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值