如果有人遇到類似問題,我需要幫助來解決此任務,這對我有很大幫助。
任務是:撰寫一個函式(不允許使用其他函式),通過將每個字符 c 更改為 * 來修改字串 s。原型功能是:void c2asterisk(char *s, char c);
撰寫一個函式(僅允許使用函式c2asterisk),通過將每個字符 c 更改為 * 來修改 n 個給定字串上的每個函式。該函式的原型是:void c2asterisk_arr(char **arr, int n, char c);
撰寫你需要的主函式,用標準輸入加載一個由五個字串組成的字串,然后(使用該c2asterisk_arr函式)修改每個加載的字串,以便將字串中的每個數字替換為 *。最后,列印一串(修改過的)字串。
我確實喜歡這樣:
#include <stdio.h>
#include <stdlib.h>
void c2asterisk(char *s, char c);
void c2asterisk_arr(char **arr, int n, char c);
int main()
{
char s[100][100];
int n;
printf("Enter how much strings you want:");
scanf("%d",&n);
while(n<1 || n>100)
{
printf("Enter how much strings you want:");
scanf("%d",&n);
}
for(int i=0;i<n;i )
{
printf("%d.string:",i 1);
scanf("%s",s[i]);
}
for(int i=0;i<n;i )
{
c2asterisk_arr(&s,n,'*');
}
for(int i=0;i<n;i )
{
printf("%s",s[0][i]);
}
return 0;
}
void c2asterisk(char *s, char c)
{
int i;
for(i=0;s[i]!=0;i )
{
s[i]=c;
}
}
void c2asterisk_arr(char **arr, int n, char c)
{
for(int i=0;i<n;i )
{
c2asterisk(arr[0][i],'*');
}
}
對我來說最大的問題是函式中 arr 上的這個雙指標,我只是不知道傳遞給它的是什么。
程式剛剛中斷,所以我會請人幫我解決這個任務,我會很感激他。
提前致謝!
最好的祝福!
uj5u.com熱心網友回復:
只需使用memset;
對于c2asterisk,您可以使用以下內容:
void c2asterisk(char *s, char c)
{
memset(s,c,strlen(s));
}
對于c2asterisk_arr您可以使用以下內容:
void c2asterisk_arr(char **arr, int n, char c)
{
for(int i=0;i<n;i )
{
memset(arr[i],c,strlen(arr[i]));
}
}
uj5u.com熱心網友回復:
撰寫一個函式(不允許使用其他函式),通過將每個字符 c 更改為 * 來修改字串 s。
您應該只將與字符“c”相同的字符更改為“*”,而不是將所有字符更改為“*”。在下面的代碼中,我修復了這個問題,并將對 c2asterisk_arr 的呼叫更改為請求將所有“o”更改為“*”。
對我來說最大的問題是函式中 arr 上的這個雙指標,我只是不知道傳遞給它的是什么。
它需要一個指向字符陣列指標串列的指標。這將用“char **s”或“char *s[100]”宣告,但“char s[100][100]”的記憶體布局不兼容,因此您不能使用它。
顯然這是家庭作業,那么你有沒有學過 malloc() ?我將采用的方法是 malloc 指標串列和單個字串,但是您可以使用“char *s [100]”方法并僅 malloc 單個字串。所以我采用這種方法是為了不以您可能不理解的方式修復您的代碼。
如果你還沒有學過 malloc() ,那么我不確定你會做什么,除非你已經學過 scanf() 的替代方法,它會分配將字串寫入的緩沖區。
#include <stdio.h>
#include <stdlib.h>
void c2asterisk(char *s, char c) {
int i;
for(i=0;s[i]!=0;i ) {
if (s[i] == c) s[i] = '*';
}
}
void c2asterisk_arr(char **arr, int n, char c) {
for(int i=0;i<n;i ) {
c2asterisk(arr[i], c);
}
}
int main() {
char *s[100];
int n;
printf("Enter how much strings you want:");
scanf("%d",&n);
while(n<1 || n>100) {
printf("Enter how much strings you want:");
scanf("%d",&n);
}
for(int i=0;i<n;i ) {
printf("%d.string:",i 1);
s[i] = malloc(100);
scanf("%s",s[i]);
}
c2asterisk_arr(s,n,'o');
for(int i=0;i<n;i ) {
printf("%s\n",s[i]);
}
return 0;
}
它這樣做:
Enter how much strings you want:5
1.string:one
2.string:two
3.string:three
4.string:four
5.string:five
*ne
tw*
three
f*ur
five
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/421382.html
標籤:
上一篇:DAXPBI中的IF函式
