C++如何去掉字符串首尾的空格
C++去掉字符串首尾空格
本關(guān)任務(wù):文本匹配的時(shí)候經(jīng)常會(huì)因?yàn)榭崭駛€(gè)數(shù)的不同而匹配失敗,現(xiàn)在要求你編寫程序?qū)斎氲淖址M(jìn)行處理,去掉首尾的空格。
例如:輸入的字符串是“ abcd ”,去掉首尾空格后字符串變?yōu)?ldquo;abcd”
編程要求
在右側(cè)編輯器中的Begin-End之間補(bǔ)充代碼,以實(shí)現(xiàn)去掉字符串(字符串由平臺(tái)提供,且已在主函數(shù)中獲?。┦孜部崭竦墓δ?。
具體要求如下:
- 對(duì)于輸入的字符串,去掉該字符串首尾的空格后輸出;
- 字符串的存儲(chǔ)使用一維字符數(shù)組,但本關(guān)要求使用指針操作。寫完程序后,你也會(huì)發(fā)現(xiàn)使用指針實(shí)現(xiàn)會(huì)容易得多。
測試說明
平臺(tái)會(huì)對(duì)你編寫的代碼進(jìn)行測試,比對(duì)你輸出的數(shù)值與實(shí)際正確數(shù)值,只有所有數(shù)據(jù)全部計(jì)算正確才能通過測試:
- 為了方便顯示空格,下面給出的測試輸入使用下劃線 ‘_’ 表示空格。
測試輸入:_____asd預(yù)期
輸出:asd
測試輸入:_a_b_c_d預(yù)期
輸出:a_b_c_d
#include <iostream>
using namespace std;
char* trim(char* str);//聲明函數(shù)
int main()
{
char s[1024]; // 定義存儲(chǔ)字符串的一維字符數(shù)組
// 輸入一行字符,可以包含空格
// 輸入的字符串存入s中,最多讀取個(gè)字符,后面自動(dòng)加上'\0'
cin.getline(s, 1024);
cout << trim(s) << endl; // 輸出去掉首尾空格后的字符串
return 0;
}
// 函數(shù)trim:去掉字符串首尾空格
// 參數(shù):str-字符指針,指向輸入的字符串
// 返回值:字符指針,指向去掉首尾空格后的字符串(首地址)
// 提示:可以直接在字符串str中操作
char* trim(char* str)
{
//這里是指針在跑
char* point = str;//組成新的指針
while (*point != '\0')//讓指針往后跑,跑到最后一個(gè)空字符的位置停下來
{
point++;//結(jié)束時(shí)指針跑到最后一元素哪里了
}
point--;//后退一位,以除去最后一位的那個(gè)空字符
while (point >= str && *point == ' ')//往回跑以除去尾部的空格字符,沒有空格了就停下來
{
*point = '\0';
point--;
}//此時(shí)除去了尾部的空格字符
point = str;//重新定義point回到第一位從頭部開始除去空格字符
while (*point == ' ')
{
point++;//結(jié)束時(shí)的位置即為新的數(shù)組首
}
return point;
}這里我提一下,可能同學(xué)們和我一樣會(huì)對(duì)空字符和空格字符是不是等價(jià)的產(chǎn)生疑問,以下是兩者的區(qū)別
1.空字符是*’\0’*而空格字符是 ’ ’ ,兩者是不一樣的
2.根據(jù)ASCII,空字符對(duì)應(yīng)的值是0,而空格字符對(duì)應(yīng)的值是32,兩者是不一樣的
C++手動(dòng)去除字符串中的空格和tab
之前遇到一個(gè)問題,要求把一行帶空格和tab的字符串中的空格和tab去掉,看了很多人的博客,但沒看懂,然后自己又想了想,算是解決了,這個(gè)應(yīng)該算比較簡單的了大概效果就是這樣

那現(xiàn)在上代碼吧,
#include<iostream>
#include<string>
using namespace std;
int main()
{ string a;
getline(cin,a); //讀入整行字符串
int n=a.length(); //判斷字符串的長度
for(int i=0;i<n;i++)
{
if(a[i]=='\t'||a[i]==' ') // 找字符串中的空格和tab
{
for(int j=i;j<n-1;j++) //找到之后將后面的字符串都往前挪一位
{
a[j]=a[j+1];
}
n=n-1; //總字符串長度減1
i--; //從剛才修改改的地方重新開始查找
}
}
for(int i=0;i<n;i++)
{
cout<<a[i];
}
cout<<'\n';
system("pause");
return 0;
}如果少了上面那個(gè)i–;就會(huì)出現(xiàn)空格或tab中的任意兩個(gè)放在一起識(shí)別不出來的情況。
就像下面這樣

我在字符之間放了兩個(gè)空格,其他同理。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Visual Studio調(diào)試C/C++教程指南
VisualStudio是微軟開發(fā)的一款集成開發(fā)環(huán)境軟件,本文主要介紹了Visual Studio調(diào)試C/C++教程指南,熟悉地掌握基于VS的C/C++調(diào)試技術(shù),可以大幅提升調(diào)試性能,感興趣的可以了解一下2024-06-06
C++ 復(fù)制控制之復(fù)制構(gòu)造函數(shù)的實(shí)現(xiàn)
所謂的“復(fù)制控制”即通過這三個(gè)成員函數(shù)控制對(duì)象復(fù)制的過程,本文主要介紹了C++ 復(fù)制控制之復(fù)制構(gòu)造函數(shù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
C++設(shè)計(jì)模式之Static Factory模式詳解
這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之Static Factory模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
C++20中的協(xié)程(Coroutine)的實(shí)現(xiàn)
這篇文章主要介紹了C++20中的協(xié)程(Coroutine)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
C++ 動(dòng)態(tài)創(chuàng)建按鈕及 按鈕的消息響應(yīng)
這篇文章主要介紹了C++ 動(dòng)態(tài)創(chuàng)建按鈕及 按鈕的消息響應(yīng)的相關(guān)資料,需要的朋友可以參考下2015-06-06

