我現在正在學習 C 我需要制作一個程式來洗掉我將從字串中輸入的字符。我看過一個演算法,我寫了這段代碼
#define MAX_LEN 200
int main()
{
char str[MAX_LEN];
char rem;
int i = 0;
printf("Enter the setence:");
gets(str);
printf("\nEnter the char to remove");
rem = getchar();
char* pDest = str;
char* pS= str;
printf("sent:\n%s", str);
while (str[i]!='\0'){
if (*pDest != rem) {
*pDest = *pS;
pDest ;
pS ;
}
else if (*pDest == rem) {
pS ;
}
i ;
}
*pDest = '\0';
while (str[i] != '\0') {
printf("number%d", i);
putchar(str[i]);
printf("\n");
i ;
}
}
但它什么都不回傳,就像 str 得到的值一樣,我認為 \0 并且什么都不回傳。你能幫我找出問題嗎?
uj5u.com熱心網友回復:
使用函式!!
如果dest是,NULL則此函式將修改字串,str否則,它會將洗掉的字串ch放入dest.
它回傳對洗掉字符的字串的參考。
char *removeChar(char *dest, char *str, const char ch)
{
char *head = dest ? dest : str, *tail = str;
if(str)
{
while(*tail)
{
if(*tail == ch) tail ;
else *head = *tail ;
}
*head = 0;
}
return dest ? dest : str;
}
int main(void)
{
char str[] = "ssHeslsslsos sWossrlssd!ss";
printf("Removal of 's' : `%s`\n", removeChar(NULL, str, 's'));
}
uj5u.com熱心網友回復:
使用陣列樣式索引來遍歷字串會更容易。例如使用str[i] = str[i 1]代替*pstr = *other_pstr. 我留下這個不完整的方法,因為這看起來像家庭作業。
int main()
{
char str[] = "0123456789";
char ch = '3';
for (int i = 0, len = strlen(str); i < len; i )
if (str[i] == ch)
{
for (int k = i; k < len; k )
{
//Todo: shift the characters to left
//Hint, it's one line
}
len--;
}
printf("%s\n", str);
return 0;
}
uj5u.com熱心網友回復:
我剛剛添加char dest[MAX_LEN]了存盤帶有已洗掉符號的字串的新字符陣列:
#define MAX_LEN 200
int main()
{
char str[MAX_LEN];
char rem;
int i = 0;
printf("Enter the setence:");
gets(str);
printf("\nEnter the char to remove");
rem = getchar();
char dest[MAX_LEN] = "\0";
char* pDest = dest;
char* pS = str;
printf("sent:\n%s", str);
while (str[i]!='\0')
{
if (*pS != rem)
{
*pDest = *pS;
pDest ;
pS ;
}
else if (*pS == rem)
{
pS ;
}
i ;
}
i = 0;
printf("\nres:\n %s \n", dest);
while (dest[i] != '\0') {
printf("number%d", i);
putchar(dest[i]);
printf("\n");
i ;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/369770.html
上一篇:在查找和使用管道中呼叫外部命令
